คำถามติดแท็ก asynchronous

การเขียนโปรแกรมแบบอะซิงโครนัสเป็นกลยุทธ์สำหรับการชะลอการดำเนินการที่มีความหน่วงแฝงสูงหรือความสำคัญต่ำซึ่งมักจะพยายามปรับปรุงประสิทธิภาพการตอบสนองและ / หรือความสามารถในการรวมของซอฟต์แวร์ กลยุทธ์ดังกล่าวมักจะใช้การรวมกันของการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์และการเรียกกลับและเลือกใช้การทำงานพร้อมกันผ่าน coroutines และ / หรือเธรด

8
ทำไมไม่รอ Task WhenAll โยน AggregateException?
ในรหัสนี้: private async void button1_Click(object sender, EventArgs e) { try { await Task.WhenAll(DoLongThingAsyncEx1(), DoLongThingAsyncEx2()); } catch (Exception ex) { // Expect AggregateException, but got InvalidTimeZoneException } } Task DoLongThingAsyncEx1() { return Task.Run(() => { throw new InvalidTimeZoneException(); }); } Task DoLongThingAsyncEx2() { return Task.Run(() => { throw new InvalidOperation();}); } …

5
อะไรคือความแตกต่างระหว่างสัญญา JavaScript และ async รอ?
ฉันใช้คุณสมบัติECMAScript 6และ ECMAScript 7 อยู่แล้ว (ขอบคุณ Babel) ในแอปพลิเคชันของฉัน - ทั้งมือถือและเว็บ ขั้นตอนแรกที่เห็นได้ชัดคือ ECMAScript 6 ระดับ ฉันได้เรียนรู้รูปแบบการไม่ซิงค์คำสัญญา (ซึ่งมีแนวโน้มจริงๆ) เครื่องกำเนิดไฟฟ้า (ไม่แน่ใจว่าทำไมจึงต้องใช้สัญลักษณ์ *) ฯลฯ จากสิ่งเหล่านี้สัญญาจึงเหมาะกับจุดประสงค์ของฉัน และฉันได้ใช้มันในแอปพลิเคชันของฉันค่อนข้างมาก นี่คือตัวอย่าง / รหัสเทียมของวิธีที่ฉันใช้คำสัญญาพื้นฐาน - var myPromise = new Promise( function (resolve,reject) { var x = MyDataStore(myObj); resolve(x); }); myPromise.then( function (x) { init(x); }); เมื่อเวลาผ่านไปฉันได้พบกับคุณลักษณะของ ECMAScript 7 และหนึ่งในนั้นคือASYNCและAWAITคำหลัก …

5
จะให้ผลตอบแทนและรอดำเนินการตามขั้นตอนการควบคุมใน. NET ได้อย่างไร
ตามที่ฉันเข้าใจyieldคำสำคัญหากใช้จากภายในบล็อกตัววนซ้ำมันจะส่งคืนขั้นตอนการควบคุมไปยังรหัสการเรียกและเมื่อตัววนซ้ำถูกเรียกอีกครั้งคำหลักจะดึงขึ้นมาจากจุดที่ค้างไว้ นอกจากนี้awaitไม่เพียง แต่รอผู้เรียกเท่านั้น แต่ยังส่งกลับการควบคุมไปยังผู้โทรเพียงเพื่อเลือกจุดที่ค้างไว้เมื่อผู้เรียกawaitsใช้เมธอด กล่าวอีกนัยหนึ่ง - ไม่มีเธรดและ "ภาวะพร้อมกัน" ของ async และการรอคอยเป็นภาพลวงตาที่เกิดจากการควบคุมอย่างชาญฉลาดซึ่งรายละเอียดจะถูกปกปิดโดยไวยากรณ์ ตอนนี้ฉันเป็นอดีตโปรแกรมเมอร์แอสเซมบลีและฉันคุ้นเคยกับตัวชี้คำสั่งสแต็กและอื่น ๆ เป็นอย่างดีและฉันได้รับวิธีการทำงานของโฟลว์การควบคุมปกติ (รูทีนย่อยการเรียกซ้ำลูปสาขา) แต่โครงสร้างใหม่เหล่านี้ - ฉันไม่เข้าใจ เมื่อawaitถึงเวลารันไทม์จะรู้ได้อย่างไรว่าโค้ดส่วนใดควรรันต่อไป มันรู้ได้อย่างไรว่ามันสามารถกลับมาทำงานต่อจากจุดที่ค้างไว้ได้อย่างไรและมันจำได้อย่างไร เกิดอะไรขึ้นกับ call stack ปัจจุบันได้รับการบันทึกหรือไม่? จะเกิดอะไรขึ้นถ้าวิธีการโทรทำให้เมธอดอื่นเรียกก่อน - awaitเหตุใดสแต็กจึงไม่ถูกเขียนทับ และรันไทม์บนโลกจะทำงานผ่านสิ่งนี้ได้อย่างไรในกรณีที่มีข้อยกเว้นและสแต็กคลายตัว เมื่อyieldถึงเวลารันไทม์จะติดตามจุดที่ควรหยิบสิ่งของได้อย่างไร? สถานะตัวทำซ้ำถูกเก็บรักษาไว้อย่างไร


14
ระงับคำเตือน CS1998: วิธีการ async นี้ไม่มี 'รอ'
ฉันมีอินเทอร์เฟซที่มีฟังก์ชัน async บางอย่าง บางคลาสที่ใช้อินเทอร์เฟซไม่ได้มีอะไรให้รอและบางคลาสอาจจะโยนทิ้ง มันน่ารำคาญเล็กน้อยกับคำเตือนทั้งหมด เมื่อไม่ใช้ await ในฟังก์ชัน async สามารถระงับข้อความได้หรือไม่? public async Task<object> test() { throw new NotImplementedException(); } คำเตือน CS1998: วิธีการ async นี้ไม่มีตัวดำเนินการ "รอ" และจะทำงานพร้อมกัน พิจารณาใช้ตัวดำเนินการ 'await' เพื่อรอการเรียก API ที่ไม่ปิดกั้นหรือ 'await Task.Run (... )' เพื่อทำงานที่ผูกกับ CPU บนเธรดพื้นหลัง
104 c#  asynchronous 

2
วิธีใช้ RestSharp กับ async / await
ฉันพยายามที่จะหาตัวอย่างที่ทันสมัยของบาง # รหัสตรงกัน C ที่ใช้ RestSharp ด้วยและasync awaitฉันรู้ว่ามีการอัปเดตล่าสุดโดย Haackแต่ฉันไม่รู้วิธีใช้วิธีการใหม่นี้ นอกจากนี้ฉันจะให้โทเค็นการยกเลิกได้อย่างไรเพื่อให้สามารถยกเลิกการดำเนินการได้ (เช่นหากมีคนไม่อยากรอและกดปุ่มยกเลิกใน UI ของแอป)

5
เหตุใดการกระทำ async จึงหยุดทำงาน
ฉันมีหลายชั้นสุทธิ 4.5 โปรแกรมประยุกต์ที่เรียกวิธีการใช้ C # 's ใหม่asyncและawaitคำหลักที่เพิ่งแฮงค์และผมก็ไม่สามารถดูว่าทำไม ที่ด้านล่างฉันมีวิธีการ async ที่ขยายยูทิลิตี้ฐานข้อมูลของเราOurDBConn(โดยทั่วไปจะเป็น wrapper สำหรับพื้นฐานDBConnectionและDBCommandวัตถุ): public static async Task<T> ExecuteAsync<T>(this OurDBConn dataSource, Func<OurDBConn, T> function) { string connectionString = dataSource.ConnectionString; // Start the SQL and pass back to the caller until finished T result = await Task.Run( () => { // Copy the …

5
คำสั่งเชลล์แบบอะซิงโครนัส
ฉันกำลังพยายามใช้เชลล์สคริปต์เพื่อเริ่มคำสั่ง ฉันไม่สนใจว่า / เมื่อไหร่ / อย่างไร / ทำไมมันจบ ฉันต้องการให้กระบวนการเริ่มต้นและทำงาน แต่ฉันต้องการกลับไปที่เชลล์ของฉันทันที ...

1
ใช้งบและรอคำหลักเล่นอย่างดีใน c #
ฉันมีสถานการณ์ที่ฉันasyncโทรไปยังเมธอดที่ส่งคืนและIDisposableอินสแตนซ์ ตัวอย่างเช่น: HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")); ก่อนหน้าasyncนี้อยู่ในที่เกิดเหตุเมื่อทำงานกับIDisposableอินสแตนซ์การโทรและรหัสที่ใช้ตัวแปร "response" นี้จะรวมอยู่ในคำสั่งใช้ คำถามของฉันคือยังคงเป็นแนวทางที่ถูกต้องหรือไม่เมื่อasyncคีย์เวิร์ดถูกโยนเข้าไปในส่วนผสม? แม้ว่าโค้ดจะคอมไพล์ แต่คำสั่งใช้จะยังคงทำงานตามที่คาดไว้ในทั้งสองตัวอย่างด้านล่างนี้หรือไม่ ตัวอย่าง 1 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { // Do something with the response return true; } ตัวอย่าง 2 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { await this.responseLogger.LogResponseAsync(response); return true; }


5
รอจนกว่างานจะเสร็จสิ้น
ฉันจะทำให้รหัสของฉันรอจนกว่างานใน DispatchQueue จะเสร็จสิ้นได้อย่างไร มันต้องการ CompletionHandler หรืออะไร? func myFunction() { var a: Int? DispatchQueue.main.async { var b: Int = 3 a = b } // wait until the task finishes, then print print(a) // - this will contain nil, of course, because it // will execute before the code above } …

4
จะ "รอ" การติดต่อกลับได้อย่างไร?
เมื่อใช้การโทรกลับธรรมดาเช่นในตัวอย่างด้านล่าง: test() { api.on( 'someEvent', function( response ) { return response; }); } ฟังก์ชันจะเปลี่ยนไปใช้ async / await ได้อย่างไร? โดยเฉพาะสมมติว่ามีการเรียกใช้ 'someEvent' ครั้งเดียวและครั้งเดียวฉันต้องการให้การทดสอบฟังก์ชันเป็นฟังก์ชัน async ซึ่งจะไม่ส่งคืนจนกว่าจะมีการเรียกกลับเช่น async test() { return await api.on( 'someEvent' ); }

22
ฉันจะสร้างคำขอ GET แบบอะซิงโครนัสใน PHP ได้อย่างไร
ฉันต้องการส่งคำขอ GET อย่างง่ายไปยังสคริปต์อื่นบนเซิร์ฟเวอร์อื่น ฉันต้องทำอย่างไร ในกรณีหนึ่งฉันเพียงแค่ขอสคริปต์ภายนอกโดยไม่ต้องใช้เอาต์พุตใด ๆ make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage ในกรณีที่สองฉันต้องได้รับเอาต์พุตข้อความ $output = make_request('http://www.externalsite.com/script2.php?variable=45'); echo $output; //string output บอกตามตรงว่าฉันไม่อยากยุ่งกับ CURL เพราะนี่ไม่ใช่หน้าที่ของ CURL จริงๆ ฉันไม่ต้องการใช้ประโยชน์จาก http_get เนื่องจากฉันไม่มีส่วนขยาย PECL fsockopen จะใช้ได้หรือไม่? ถ้าเป็นเช่นนั้นฉันจะทำสิ่งนี้โดยไม่อ่านเนื้อหาของไฟล์ได้อย่างไร ไม่มีวิธีอื่นหรือ ขอบคุณทุกคน อัปเดต ฉันควรเพิ่มในกรณีแรกฉันไม่ต้องการรอให้สคริปต์ส่งคืนอะไร ตามที่ฉันเข้าใจ file_get_contents () จะรอให้เพจโหลดจนเสร็จ ฯลฯ ?
98 php  http  curl  asynchronous 

6
พารามิเตอร์ดีฟอลต์สำหรับ Can CancelToken
ฉันมีรหัส async บางอย่างที่ผมอยากจะเพิ่มCancellationTokenไป แต่มีการใช้งานจำนวนมากที่นี้ไม่จำเป็นต้องดังนั้นผมจึงอยากมีพารามิเตอร์เริ่มต้น - CancellationToken.Noneบางที อย่างไรก็ตาม Task<x> DoStuff(...., CancellationToken ct = null) ผลตอบแทน ไม่สามารถใช้ค่าประเภท '' เป็นพารามิเตอร์เริ่มต้นได้เนื่องจากไม่มีการแปลงมาตรฐานให้พิมพ์ 'System.Threading.CancellationToken' และ Task<x> DoStuff(...., CancellationToken ct = CancellationToken.None) ค่าพารามิเตอร์เริ่มต้นสำหรับ 'ct' ต้องเป็นค่าคงที่เวลาคอมไพล์ มีวิธีใดบ้างที่จะมีค่าเริ่มต้นสำหรับCancellationToken?

3
การโทรแบบ Async ด้วยการรอใน HttpClient จะไม่ส่งกลับ
ฉันมีสายที่ฉันโทรจากภายในC#แอปพลิเคชันรถไฟใต้ดินที่ใช้xaml บน Win8 CP สายนี้เพียงแค่กระทบบริการเว็บและส่งคืนข้อมูล JSON HttpMessageHandler handler = new HttpClientHandler(); HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = new Uri("http://192.168.1.101/api/"); var result = await httpClient.GetStreamAsync("weeklyplan"); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WeeklyPlanData[])); return (WeeklyPlanData[])ser.ReadObject(result); มันค้างที่awaitแต่การโทรhttpส่งกลับเกือบจะในทันที (ยืนยันผ่านมือไม่พาย); ราวกับว่าawaitถูกเพิกเฉยและมันก็ค้างอยู่ที่นั่น ก่อนที่คุณจะถาม - ใช่ - ความสามารถของเครือข่ายส่วนตัวเปิดอยู่ ความคิดใด ๆ ที่จะแขวน?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.