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

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

10
การรวมกันของฟังก์ชั่น async + รอ + setTimeout
ฉันกำลังพยายามใช้คุณสมบัติใหม่ของ async และฉันหวังว่าการแก้ปัญหาของฉันจะช่วยผู้อื่นในอนาคต นี่คือรหัสของฉันซึ่งใช้งานได้: async function asyncGenerator() { // other code while (goOn) { // other code var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); // other code } // other code } function listFiles(token) { return gapi.client.drive.files.list({ 'maxResults': sizeResults, 'pageToken': token, 'q': query }); } ปัญหาคือขณะที่ลูปของฉันทำงานเร็วเกินไปและสคริปต์ส่งคำขอมากเกินไปต่อวินาทีไปยัง google …

3
คุณต้องวาง Task.Run ลงในเมธอดเพื่อทำให้เป็น async หรือไม่?
ฉันพยายามที่จะเข้าใจ async ที่รอในรูปแบบที่ง่ายที่สุด ฉันต้องการสร้างวิธีง่าย ๆ ที่เพิ่มตัวเลขสองตัวเพื่อประโยชน์ของตัวอย่างนี้ได้รับไม่มีเวลาในการประมวลผลเลยมันเป็นเพียงเรื่องของการสร้างตัวอย่างที่นี่ ตัวอย่างที่ 1 private async Task DoWork1Async() { int result = 1 + 2; } ตัวอย่างที่ 2 private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); } หากฉันรอDoWork1Async()รหัสจะทำงานพร้อมกันหรือไม่ตรงกัน? ฉันจำเป็นต้องรวมโค้ดการซิงค์ไว้ด้วยTask.Runเพื่อให้วิธีนี้ไม่สามารถรอได้และแบบอะซิงโครนัสเพื่อไม่ให้บล็อกเธรด UI หรือไม่ ฉันพยายามที่จะคิดออกว่าวิธีการของฉันเป็นTaskหรือTask<T>ฉันจะต้องห่อรหัสด้วยTask.Runเพื่อให้มันไม่ตรงกัน คำถามโง่ฉันแน่ใจ แต่ผมดูตัวอย่างในสุทธิที่ผู้คนกำลังรอรหัสที่มีอะไร async ภายในและไม่ได้อยู่ในห่อหรือTask.RunStartNew

6
ตรวจจับข้อยกเว้นที่ถูกโยนโดยวิธีการ void async
การใช้ async CTP จาก Microsoft สำหรับ. NET เป็นไปได้หรือไม่ที่จะรับข้อยกเว้นที่เกิดจากวิธี async ในวิธีการโทร? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ …

8
ใช้งาน async หลายงานและรอให้การดำเนินการทั้งหมดเสร็จสมบูรณ์
ฉันต้องเรียกใช้งาน async หลายรายการในแอปพลิเคชันคอนโซลและรอให้งานทั้งหมดดำเนินการจนเสร็จสิ้น มีบทความมากมายที่นั่น แต่ฉันดูเหมือนจะสับสนมากยิ่งฉันอ่าน ฉันได้อ่านและทำความเข้าใจหลักการพื้นฐานของ Task Library แล้ว แต่ฉันขาดการเชื่อมโยงอย่างชัดเจน ฉันเข้าใจว่าเป็นไปได้ที่จะเชื่อมโยงงานเพื่อให้พวกเขาเริ่มต้นหลังจากเสร็จสมบูรณ์ (ซึ่งเป็นสถานการณ์ที่ค่อนข้างมากสำหรับบทความทั้งหมดที่ฉันได้อ่าน) แต่ฉันต้องการให้งานทั้งหมดของฉันทำงานพร้อมกันและฉันอยากรู้อีกครั้ง เสร็จสิ้นทั้งหมด การใช้งานที่ง่ายที่สุดสำหรับสถานการณ์เช่นนี้คืออะไร

7
วัตถุประสงค์ของ“ การรอคืนสินค้า” ใน C # คืออะไร
มีใด ๆสถานการณ์ที่เขียนวิธีการเช่นนี้ public async Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return await DoAnotherThingAsync(); } แทนสิ่งนี้: public Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return DoAnotherThingAsync(); } จะทำให้รู้สึก เหตุใดจึงต้องใช้การreturn awaitสร้างเมื่อคุณสามารถกลับTask<T>จากการDoAnotherThingAsync()เรียกใช้ภายในได้โดยตรง ฉันเห็นโค้ดreturn awaitในหลาย ๆ ที่ฉันคิดว่าฉันอาจพลาดอะไรบางอย่างไป แต่เท่าที่ฉันเข้าใจไม่ใช้ async …
251 c#  .net  .net-4.5  async-await 

11
หากการรอคอยแบบ async ไม่ได้สร้างหัวข้อเพิ่มเติมใด ๆ แล้วจะทำให้แอปพลิเคชันตอบสนองได้อย่างไร
ครั้งแล้วครั้งเล่าฉันเห็นว่าการใช้async- awaitไม่ได้สร้างกระทู้เพิ่มเติม ไม่เป็นไรเพราะวิธีการเดียวที่คอมพิวเตอร์สามารถทำได้มากกว่า 1 อย่างในเวลาเดียวคือ จริง ๆ แล้วทำสิ่งต่าง ๆ มากกว่า 1 ครั้ง (ดำเนินการแบบขนานใช้หลายโปรเซสเซอร์) จำลองสถานการณ์โดยการกำหนดตารางงานและสลับไปมาระหว่างกัน (ทำ A เล็กน้อย, B เล็กน้อย, A เล็กน้อย, ฯลฯ ) ดังนั้นถ้าasync- awaitไม่ทำสิ่งเหล่านั้นมันจะทำให้แอปพลิเคชันตอบสนองได้อย่างไร หากมีเพียงเธรดเดียวเท่านั้นการเรียกใช้เมธอดใด ๆ หมายถึงการรอให้เมธอดดำเนินการให้เสร็จสิ้นก่อนที่จะทำสิ่งอื่นและวิธีการที่อยู่ภายในเมธอดนั้นต้องรอผลก่อนดำเนินการต่อไปเรื่อย ๆ

10
รองานหลายงานที่มีผลลัพธ์แตกต่างกัน
ฉันมี 3 งาน: private async Task<Cat> FeedCat() {} private async Task<House> SellHouse() {} private async Task<Tesla> BuyCar() {} พวกเขาทุกคนจำเป็นต้องเรียกใช้ก่อนที่รหัสของฉันจะสามารถดำเนินต่อไปและฉันต้องการผลลัพธ์จากแต่ละรายการเช่นกัน ไม่มีผลลัพธ์ใดที่เหมือนกันซึ่งกันและกัน ฉันจะโทรและรอให้งานทั้ง 3 เสร็จสมบูรณ์แล้วจึงได้ผลลัพธ์

2
ความแตกต่างระหว่างการเขียนโปรแกรมแบบอะซิงโครนัสและมัลติเธรดคืออะไร?
ฉันคิดว่ามันเหมือนกัน - เขียนโปรแกรมที่แบ่งงานระหว่างโปรเซสเซอร์ (บนเครื่องที่มีโปรเซสเซอร์ 2+) จากนั้นฉันก็อ่านสิ่งนี้ซึ่งพูดว่า: วิธีการแบบอะซิงก์มีจุดประสงค์เพื่อให้ไม่มีการบล็อก นิพจน์ที่รออยู่ในเมธอด async จะไม่บล็อกเธรดปัจจุบันในขณะที่งานที่รออยู่กำลังทำงานอยู่ แต่นิพจน์จะลงทะเบียนส่วนที่เหลือของวิธีเป็นการต่อเนื่องและส่งกลับการควบคุมไปยังผู้โทรของวิธีการแบบอะซิงก์ คำหลักแบบ async และ waitit จะไม่ทำให้เกิดการสร้างเธรดเพิ่มเติม เมธอด Async ไม่ต้องการมัลติเธรดเนื่องจากเมธอด async ไม่ทำงานบนเธรดของตัวเอง วิธีการทำงานกับบริบทการซิงโครไนซ์ปัจจุบันและใช้เวลาในเธรดเฉพาะเมื่อวิธีการใช้งานอยู่ คุณสามารถใช้ Task.Run เพื่อย้ายงานที่เชื่อมโยงกับ CPU ไปยังเธรดพื้นหลังได้ แต่เธรดพื้นหลังไม่ได้ช่วยกระบวนการที่รอให้ผลลัพธ์พร้อมใช้งาน และฉันสงสัยว่ามีคนสามารถแปลเป็นภาษาอังกฤษให้ฉันได้หรือไม่ ดูเหมือนว่าจะแยกความแตกต่างระหว่าง asyncronicity (นั่นคือคำ?) และการทำเกลียวและบอกเป็นนัยว่าคุณสามารถมีโปรแกรมที่มีงานแบบอะซิงโครนัส แต่ไม่มีมัลติเธรด ตอนนี้ฉันเข้าใจความคิดของงานอะซิงโครนัสเช่นตัวอย่างใน pg 467 ของC #ของ Jon Skeet ในความลึก, รุ่นที่สาม async void DisplayWebsiteLength ( object sender, EventArgs …

12
วิธีการเรียก async แบบซิงโครนัส
ฉันมีasyncวิธี: public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; } ฉันต้องเรียกวิธีนี้จากวิธีการแบบซิงโครนัส ฉันจะทำสิ่งนี้ได้โดยไม่ต้องทำซ้ำGenerateCodeAsyncวิธีเพื่อให้สามารถทำงานพร้อมกันได้หรือไม่ ปรับปรุง ยังไม่พบวิธีแก้ไขที่สมเหตุสมผล อย่างไรก็ตามฉันเห็นว่าHttpClientใช้รูปแบบนี้แล้ว using (HttpClient client = new HttpClient()) { // async HttpResponseMessage responseAsync = await client.GetAsync(url); // sync HttpResponseMessage responseSync = client.GetAsync(url).Result; }

4
เมื่อใดที่ฉันจะใช้ Task.Yield ()
ฉันกำลังใช้ async / คอยและTaskมีจำนวนมาก แต่ไม่เคยใช้Task.Yield()และซื่อสัตย์แม้ว่าจะมีคำอธิบายทั้งหมดฉันไม่เข้าใจว่าทำไมฉันถึงต้องใช้วิธีนี้ ใครสามารถยกตัวอย่างที่ดีที่Yield()จำเป็น
218 c#  async-await 

8
เมื่อใดที่ฉันควรใช้ Async Controllers ใน ASP.NET MVC
ฉันมีข้อกังวลบางอย่างเกี่ยวกับการใช้การกระทำของ async ใน ASP.NET MVC เมื่อไหร่มันจะปรับปรุงประสิทธิภาพการทำงานของแอพพลิเคของฉันและเมื่อไม่ได้ไม่ได้ ? มันเป็นการดีที่จะใช้ async การกระทำทุกที่ใน ASP.NET MVC? เกี่ยวกับวิธีการที่รอคอย: ฉันจะใช้ async / คอยคำสำคัญเมื่อฉันต้องการสอบถามฐานข้อมูล (ผ่าน EF / NHibernate / ORM อื่น ๆ ) กี่ครั้งที่ฉันสามารถใช้คำหลักที่รอคอยที่จะสอบถามฐานข้อมูลแบบไม่พร้อมกันในหนึ่งวิธีการดำเนินการเดียว?

2
ฉันจะทำเครื่องหมาย async ของแลมบ์ดาได้ที่ไหน?
ฉันได้รับรหัสนี้: private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args) { CheckBox ckbx = null; if (sender is CheckBox) { ckbx = sender as CheckBox; } if (null == ckbx) { return; } string groupName = ckbx.Content.ToString(); var contextMenu = new PopupMenu(); // Add a command to edit the current Group contextMenu.Commands.Add(new …

6
ความแตกต่างระหว่าง Task.Start / Wait และ Async / Await คืออะไร
ฉันอาจจะหายไปบางอย่าง แต่ความแตกต่างระหว่างทำคืออะไร: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComplete(); } public async void MyMethod() { var result = Task.Factory.StartNew(DoSomethingThatTakesTime); await result; UpdateLabelToSayItsComplete(); } private void DoSomethingThatTakesTime() { Thread.Sleep(10000); }


3
รอคอย vs Task.Wait - Deadlock?
ฉันไม่เข้าใจความแตกต่างระหว่างและTask.Waitawait ฉันมีบางอย่างที่คล้ายกับฟังก์ชั่นต่อไปนี้ในบริการ ASP.NET WebAPI: public class TestController : ApiController { public static async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() { return await Bar(); } // GET api/test public IEnumerable<string> Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x …

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