คำถามติดแท็ก async-await

สิ่งนี้ครอบคลุมรูปแบบการเขียนโปรแกรมแบบอะซิงโครนัสที่รองรับโดยภาษาการเขียนโปรแกรมต่างๆโดยใช้ async และรอคำสำคัญ

3
คุณจะสร้างวิธีแบบอะซิงโครนัสใน C # ได้อย่างไร
โพสต์บล็อกทุกรายการที่ฉันอ่านจะบอกวิธีใช้อะซิงโครนัสเมธอดใน C # แต่ด้วยเหตุผลแปลก ๆ บางอย่างไม่เคยอธิบายวิธีการสร้างวิธีอะซิงโครนัสของคุณเองเพื่อบริโภค ดังนั้นฉันมีรหัสนี้ทันทีที่ใช้วิธีการของฉัน: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } และฉันเขียนวิธีนี้คือCountToAsync: private Task<DateTime> CountToAsync(int num = 1000) { return Task.Factory.StartNew(() => { for (int i = 0; i < num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x …
196 c#  async-await  c#-5.0 

6
การใช้งานสำหรับ Task.FromResult คืออะไร <TResult> ใน C #
ใน C # และ TPL ( Task Parallel Library ) Taskคลาสจะแสดงงานต่อเนื่องที่สร้างมูลค่าประเภท T ฉันต้องการที่จะรู้ว่าสิ่งที่จำเป็นสำหรับวิธีการTask.FromResult ? นั่นคือ: ในสถานการณ์ที่คุณมีมูลค่าที่ผลิตอยู่แล้วสิ่งที่จำเป็นต้องห่อกลับเข้าไปในงานคืออะไร? สิ่งเดียวที่อยู่ในใจคือมันถูกใช้เป็นอะแดปเตอร์สำหรับวิธีการอื่นที่ยอมรับอินสแตนซ์ของงาน

9
การทำรังกำลังรออยู่ใน Parallel.ForEach
ในแอพพลิเคชั่นรถไฟใต้ดินฉันต้องทำการเรียก WCF เป็นจำนวนมาก มีการโทรจำนวนมากที่ต้องทำการโทรออกดังนั้นฉันต้องทำการโทรแบบวนซ้ำ ปัญหาคือว่าลูปแบบขนานจะออกก่อนที่การเรียก WCF จะเสร็จสมบูรณ์ คุณจะปรับการทำงานให้เป็นไปตามที่คาดไว้ได้อย่างไร var ids = new List&lt;string&gt;() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; var customers = new System.Collections.Concurrent.BlockingCollection&lt;Customer&gt;(); Parallel.ForEach(ids, async i =&gt; { ICustomerRepo repo = new CustomerRepo(); var cust = await repo.GetCustomer(i); customers.Add(cust); }); foreach ( var …

6
ฉันจะใช้ async / คอยอยู่ที่ระดับสูงสุดได้อย่างไร
ฉันได้ไปมากกว่าasync/ awaitและหลังจากอ่านบทความต่าง ๆ ฉันตัดสินใจทดสอบด้วยตนเอง อย่างไรก็ตามฉันไม่สามารถคาดศีรษะได้ว่าทำไมสิ่งนี้ถึงไม่ทำงาน: async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text); คอนโซลเอาต์พุตต่อไปนี้ (โหนด v8.6.0): &gt; ข้างนอก: [วัตถุสัญญา] &gt; ข้างใน: เฮ้นั่น ทำไมข้อความบันทึกภายในฟังก์ชั่นถึงทำงานหลังจากนั้น ฉันคิดว่าเหตุผลasync/ awaitถูกสร้างขึ้นเพื่อดำเนินการซิงโครนัสโดยใช้งานอะซิงโครนัส มีวิธีที่ฉันสามารถใช้ค่าที่ส่งกลับภายในฟังก์ชั่นโดยไม่ต้องใช้ความ.then()หลังmain()?

5
มีความแตกต่างระหว่างรอ Promise.all () และรออีกหลายครั้งหรือไม่
มีความแตกต่างระหว่าง: const [result1, result2] = await Promise.all([task1(), task2()]); และ const t1 = task1(); const t2 = task2(); const result1 = await t1; const result2 = await t2; และ const [t1, t2] = [task1(), task2()]; const [result1, result2] = [await t1, await t2];

3
วิธีค้นหาสัญญาที่ไม่ได้จัดการใน Node.js UnhandledPromiseRejectionWarning?
Node.js จากเวอร์ชัน 7 มี async / คอยน้ำตาล syntactic สำหรับจัดการสัญญาและตอนนี้ในรหัสของฉันคำเตือนต่อไปนี้เกิดขึ้นค่อนข้างบ่อย: (node:11057) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: Error: Can't set headers after they are sent. (node:11057) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero …


5
ใช้ async กำลังรออยู่กับ Array.map
รับรหัสต่อไปนี้: var arr = [1,2,3,4,5]; var results: number[] = await arr.map(async (item): Promise&lt;number&gt; =&gt; { await callAsynchronousOperation(item); return item + 1; }); ซึ่งสร้างข้อผิดพลาดต่อไปนี้: TS2322: พิมพ์ 'Promise &lt;number&gt; []' ไม่สามารถกำหนดให้พิมพ์ 'number []' พิมพ์ 'Promise &lt;number&gt; ไม่สามารถกำหนดให้พิมพ์' number 'ได้ ฉันจะแก้ไขได้อย่างไร ฉันจะสร้างasync awaitและArray.mapทำงานร่วมกันได้อย่างไร

14
ตัวสร้างคลาส Async / Await
ในขณะนี้ฉันกำลังพยายามใช้async/awaitภายในฟังก์ชันตัวสร้างคลาส นี่คือเพื่อให้ฉันสามารถรับe-mailแท็กที่กำหนดเองสำหรับโครงการอิเล็กตรอนที่ฉันกำลังทำงานอยู่ customElements.define('e-mail', class extends HTMLElement { async constructor() { super() let uid = this.getAttribute('data-uid') let message = await grabUID(uid) const shadowRoot = this.attachShadow({mode: 'open'}) shadowRoot.innerHTML = ` &lt;div id="email"&gt;A random email message has appeared. ${message}&lt;/div&gt; ` } }) อย่างไรก็ตามในขณะนี้โครงการไม่ทำงานโดยมีข้อผิดพลาดดังต่อไปนี้: Class constructor may not be an async method มีวิธีที่จะหลีกเลี่ยงสิ่งนี้เพื่อให้ฉันสามารถใช้ async …

4
Async / await vs BackgroundWorker
ในไม่กี่วันที่ผ่านมาฉันได้ทดสอบคุณสมบัติใหม่ของ. net 4.5 และ c # 5 ฉันชอบคุณสมบัติใหม่ของ async / await ก่อนหน้านี้ฉันใช้BackgroundWorkerเพื่อจัดการกระบวนการที่ยาวนานขึ้นในพื้นหลังด้วย UI ที่ตอบสนอง คำถามของฉันคือ: หลังจากมีคุณสมบัติใหม่ที่ดีเหล่านี้ฉันควรใช้ async / คอยและเมื่อเป็นBackgroundWorker ? สถานการณ์ทั่วไปสำหรับทั้งคู่คืออะไร

4
Parallel.ForEach กับ Task.Run และ Task.WhenAll
อะไรคือความแตกต่างระหว่างการใช้ Parallel.ForEach หรือ Task.Run () เพื่อเริ่มชุดของงานแบบอะซิงโครนัส? รุ่น 1: List&lt;string&gt; strings = new List&lt;string&gt; { "s1", "s2", "s3" }; Parallel.ForEach(strings, s =&gt; { DoSomething(s); }); รุ่น 2: List&lt;string&gt; strings = new List&lt;string&gt; { "s1", "s2", "s3" }; List&lt;Task&gt; Tasks = new List&lt;Task&gt;(); foreach (var s in strings) { Tasks.Add(Task.Run(() =&gt; DoSomething(s))); …

8
การระงับ“ คำเตือน CS4014: เนื่องจากการโทรนี้ไม่รอการดำเนินการของวิธีการปัจจุบันยังคงดำเนินต่อไป…”
นี้ไม่ซ้ำกับ"วิธีการได้อย่างปลอดภัยเรียกวิธี async ใน C # โดยไม่ต้องรอคอย" ฉันจะระงับคำเตือนต่อไปนี้ได้อย่างไร? คำเตือน CS4014: เนื่องจากการโทรนี้ไม่ได้รอการดำเนินการของวิธีการปัจจุบันจะดำเนินต่อไปก่อนที่การโทรจะเสร็จสมบูรณ์ พิจารณาใช้โอเปอเรเตอร์ 'ที่รอ' กับผลลัพธ์ของการโทร ตัวอย่างง่ายๆ: static async Task WorkAsync() { await Task.Delay(1000); Console.WriteLine("Done!"); } static async Task StartWorkAsync() { WorkAsync(); // I want fire-and-forget // more unrelated async/await stuff here, e.g.: // ... await Task.Delay(2000); } สิ่งที่ฉันพยายามและไม่ชอบ: static async Task StartWorkAsync() …
156 c#  async-await 

8
เป็นไปได้ไหมที่จะรอเหตุการณ์แทนที่จะเป็นวิธีการอื่นแบบ async?
ในแอปรถไฟใต้ดิน C # / XAML ของฉันมีปุ่มที่เริ่มกระบวนการทำงานที่ยาวนาน ดังนั้นตามที่แนะนำฉันใช้ async / รอคอยเพื่อให้แน่ใจว่าเธรด UI ไม่ถูกบล็อก: private async void Button_Click_1(object sender, RoutedEventArgs e) { await GetResults(); } private async Task GetResults() { // Do lot of complex stuff that takes a long time // (e.g. contact some web services) ... } บางครั้งสิ่งที่เกิดขึ้นภายใน GetResults จะต้องป้อนข้อมูลผู้ใช้เพิ่มเติมก่อนจึงจะสามารถดำเนินการต่อได้ …

2
เกี่ยวกับการใช้งานของ Task.Start (), Task.Run () และ Task.Factory.StartNew ()
ฉันเพิ่งเห็น 3 กิจวัตรเกี่ยวกับการใช้ TPL ซึ่งทำงานเหมือนกัน นี่คือรหัส: public static void Main() { Thread.CurrentThread.Name = "Main"; // Create a task and supply a user delegate by using a lambda expression. Task taskA = new Task( () =&gt; Console.WriteLine("Hello from taskA.")); // Start the task. taskA.Start(); // Output a message from the calling …

10
คำเตือนไม่รอการเรียกนี้การดำเนินการของเมธอดปัจจุบันจะดำเนินต่อไป
เพียงแค่มี VS2012 asyncและพยายามที่จะได้รับการจัดการใน สมมติว่าฉันมีวิธีการดึงค่าจากแหล่งที่มาของการบล็อก ฉันไม่ต้องการให้ผู้โทรของเมธอดบล็อก ฉันสามารถเขียนเมธอดในการโทรกลับซึ่งจะเรียกใช้เมื่อค่ามาถึง แต่เนื่องจากฉันใช้ C # 5 ฉันจึงตัดสินใจที่จะทำให้เมธอด async เพื่อให้ผู้โทรไม่ต้องจัดการกับการโทรกลับ: // contrived example (edited in response to Servy's comment) public static Task&lt;string&gt; PromptForStringAsync(string prompt) { return Task.Factory.StartNew(() =&gt; { Console.Write(prompt); return Console.ReadLine(); }); } นี่คือตัวอย่างวิธีการที่เรียกมัน ถ้าPromptForStringAsyncไม่ใช่ async วิธีนี้จะต้องมีการซ้อนการโทรกลับภายในการโทรกลับ ด้วย async ฉันจะเขียนวิธีการของฉันด้วยวิธีที่เป็นธรรมชาตินี้: public static async Task GetNameAsync() { …
142 c#  async-await 

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