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

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

7
ASP.NET Web API OperationCanceledException เมื่อเบราว์เซอร์ยกเลิกการร้องขอ
เมื่อผู้ใช้โหลดเพจผู้ใช้จะทำการร้องขอ ajax อย่างน้อยหนึ่งรายการซึ่งเข้าสู่ตัวควบคุม ASP.NET Web API 2 หากผู้ใช้ไปยังหน้าอื่นก่อนที่คำขอ ajax เหล่านี้จะเสร็จสมบูรณ์คำขอจะถูกยกเลิกโดยเบราว์เซอร์ ELMAH HttpModule ของเราจะบันทึกข้อผิดพลาดสองข้อสำหรับแต่ละคำขอที่ถูกยกเลิก: ข้อผิดพลาด 1: System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task …

4
ฉันควรหลีกเลี่ยงตัวจัดการเหตุการณ์ 'async void' หรือไม่
ฉันรู้ว่าโดยทั่วไปถือว่าเป็นความคิดที่ไม่ดีที่จะใช้วิธีการจุดไฟและลืมasync voidเพื่อเริ่มงานเนื่องจากไม่มีงานที่รอดำเนินการอยู่และเป็นเรื่องยากที่จะจัดการข้อยกเว้นที่อาจเกิดขึ้นในวิธีการดังกล่าว โดยทั่วไปฉันควรหลีกเลี่ยงasync voidตัวจัดการเหตุการณ์ด้วยหรือไม่ ตัวอย่างเช่น, private async void Form_Load(object sender, System.EventArgs e) { await Task.Delay(2000); // do async work // ... } ฉันสามารถเขียนใหม่ได้ดังนี้: Task onFormLoadTask = null; // track the task, can implement cancellation private void Form_Load(object sender, System.EventArgs e) { this.onFormLoadTask = OnFormLoadTaskAsync(sender, e); } private async Task OnFormLoadTaskAsync(object …

2
ความแตกต่างระหว่าง await และ ContinueWith
คนที่สามารถอธิบายถ้าawaitและContinueWithมีความหมายเหมือนหรือไม่ได้อยู่ในตัวอย่างต่อไปนี้ ฉันพยายามใช้ TPL เป็นครั้งแรกและอ่านเอกสารทั้งหมดแล้ว แต่ไม่เข้าใจความแตกต่าง รอ : String webText = await getWebPage(uri); await parseData(webText); ดำเนินการต่อด้วย : Task<String> webText = new Task<String>(() => getWebPage(uri)); Task continue = webText.ContinueWith((task) => parseData(task.Result)); webText.Start(); continue.Wait(); เป็นที่ต้องการมากกว่าอีกสถานการณ์หนึ่งหรือไม่?

7
ลอง / จับบล็อกด้วย async / await
ฉันกำลังขุดเข้าไปในโหนด 7 คุณลักษณะ async / await และยังคงสะดุดกับโค้ดเช่นนี้ function getQuote() { let quote = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis …

6
ฟังก์ชัน Suspend หมายถึงอะไรใน Kotlin Coroutine
ฉันกำลังอ่าน Kotlin Coroutine และรู้ว่ามันขึ้นอยู่กับsuspendฟังก์ชัน แต่suspendหมายความว่าอย่างไร? โครูทีนหรือฟังก์ชันถูกระงับ? จากhttps://kotlinlang.org/docs/reference/coroutines.html โดยทั่วไปโครูทีนคือการคำนวณที่สามารถระงับได้โดยไม่ต้องบล็อกเธรด ฉันได้ยินคนพูดว่า "ระงับฟังก์ชัน" บ่อยๆ แต่ฉันคิดว่ามันเป็นโครูทีนที่ถูกระงับเพราะรอให้ฟังก์ชันเสร็จสิ้น? "ระงับ" มักจะหมายถึง "หยุดการทำงาน" ในกรณีนี้โครูทีนไม่ได้ใช้งาน 🤔เราควรบอกว่าโครูทีนถูกระงับหรือไม่? โครูทีนใดถูกระงับ จากhttps://kotlinlang.org/docs/reference/coroutines.html หากต้องการดำเนินการเปรียบเทียบต่อไป await () อาจเป็นฟังก์ชันระงับ (ดังนั้นจึงสามารถเรียกได้จากภายในบล็อก async {}) ที่ระงับโครูทีนจนกว่าการคำนวณบางส่วนจะเสร็จสิ้นและส่งคืนผลลัพธ์: async { // Here I call it the outer async coroutine ... // Here I call computation the inner coroutine val result = …

2
รองานที่เสร็จสมบูรณ์เช่นเดียวกับงานผลลัพธ์?
ฉันกำลังอ่าน " Concurrency in C # Cookbook " โดย Stephen Cleary และสังเกตเห็นเทคนิคต่อไปนี้: var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask; downloadTaskคือเรียกร้องให้httpclient.GetStringAsyncและกำลังดำเนินการtimeoutTaskTask.Delay ในกรณีที่ไม่หมดเวลาแสดงว่าdownloadTaskเป็นที่เรียบร้อยแล้ว เหตุใดจึงจำเป็นต้องรอเป็นครั้งที่สองแทนที่จะกลับมาdownloadTask.Resultเนื่องจากงานเสร็จเรียบร้อยแล้ว

2
การใช้งานอินเทอร์เฟซแบบ async
ฉันกำลังพยายามสร้างแอปพลิเคชันของฉันโดยใช้วิธี Async IO ทั้งหมดของฉันทำผ่านการใช้งานอินเทอร์เฟซอย่างชัดเจนและฉันสับสนเล็กน้อยเกี่ยวกับวิธีทำให้การดำเนินการไม่ตรงกัน เมื่อฉันเห็นสิ่งต่างๆฉันมีสองทางเลือกในการใช้งาน: interface IIO { void DoOperation(); } ตัวเลือกที่ 1: ทำการ async การใช้งานโดยนัยและรอผลในการนำไปใช้โดยปริยาย class IOImplementation : IIO { async void DoOperation() { await Task.Factory.StartNew(() => { //WRITING A FILE OR SOME SUCH THINGAMAGIG }); } #region IIO Members void IIO.DoOperation() { DoOperation(); } #endregion } OPTION2: ทำการ …

6
ความแตกต่างระหว่าง "คำสัญญาที่รอการส่งคืน" และ "คำสัญญาที่กลับมา"
จากตัวอย่างโค้ดด้านล่างมีพฤติกรรมที่แตกต่างกันหรือไม่และถ้าเป็นเช่นนั้นความแตกต่างเหล่านั้นคืออะไร? return await promise async function delay1Second() { return (await delay(1000)); } return promise async function delay1Second() { return delay(1000); } ตามที่ฉันเข้าใจข้อแรกจะมีการจัดการข้อผิดพลาดภายในฟังก์ชัน async และข้อผิดพลาดจะเกิดขึ้นจาก Promise ของฟังก์ชัน async อย่างไรก็ตามข้อที่สองจะต้องใช้ขีดน้อยกว่าหนึ่งขีด ถูกต้องหรือไม่ ตัวอย่างข้อมูลนี้เป็นเพียงฟังก์ชันทั่วไปในการส่งคืน Promise สำหรับการอ้างอิง function delay(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); }

13
จะ จำกัด ปริมาณการดำเนินการ async I / O พร้อมกันได้อย่างไร?
// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); นี่คือปัญหาเริ่มต้นคำขอเว็บพร้อมกันมากกว่า 1,000 รายการ มีวิธีง่ายๆในการ …

3
รับ TransactionScope เพื่อทำงานกับ async / await
ฉันกำลังพยายามรวมasync/ awaitเข้ากับบัสบริการของเรา ผมดำเนินการSingleThreadSynchronizationContextบนพื้นฐานของตัวอย่างนี้http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx TransactionScopeและทำงานดียกเว้นสิ่งหนึ่งที่: ฉันรอคอยสิ่งที่อยู่ข้างในTransactionScopeและมันก็ทำลายTransactionScope. TransactionScopeไม่ได้ดูเหมือนว่าจะเล่นดีกับasync/ อย่างแน่นอนเพราะมันเก็บสิ่งในหัวข้อการใช้await ThreadStaticAttributeฉันได้รับข้อยกเว้นนี้: "TransactionScope ซ้อนไม่ถูกต้อง" ฉันพยายามบันทึกTransactionScopeข้อมูลก่อนจัดคิวงานและกู้คืนก่อนที่จะรัน แต่ดูเหมือนว่าจะไม่เปลี่ยนแปลงอะไรเลย และTransactionScopeโค้ดก็เป็นระเบียบดังนั้นจึงยากที่จะเข้าใจว่าเกิดอะไรขึ้น มีวิธีทำให้ใช้งานได้หรือไม่? มีทางเลือกอื่นให้TransactionScopeหรือไม่?

4
ใช้ async / await อย่างมีประสิทธิภาพด้วย ASP.NET Web API
ฉันพยายามใช้async/awaitคุณสมบัติของ ASP.NET ในโครงการ Web API ของฉัน ฉันไม่แน่ใจมากนักว่าจะสร้างความแตกต่างในประสิทธิภาพของบริการ Web API ของฉันหรือไม่ โปรดดูขั้นตอนการทำงานและโค้ดตัวอย่างด้านล่างจากแอปพลิเคชันของฉัน ขั้นตอนการทำงาน: แอปพลิเคชัน UI →ปลายทาง Web API (ตัวควบคุม) →วิธีการโทรในชั้นบริการ Web API →เรียกใช้บริการเว็บภายนอกอื่น (ที่นี่เรามีการโต้ตอบฐานข้อมูล ฯลฯ ) ควบคุม: public async Task<IHttpActionResult> GetCountries() { var allCountrys = await CountryDataService.ReturnAllCountries(); if (allCountrys.Success) { return Ok(allCountrys.Domain); } return InternalServerError(); } ชั้นบริการ: public Task<BackOfficeResponse<List<Country>>> ReturnAllCountries() { …

4
async / รอผลตอบแทนสัญญาโดยปริยาย?
ฉันอ่านว่าฟังก์ชัน async ที่ทำเครื่องหมายโดยasyncคำหลักส่งคืนสัญญาโดยปริยาย: async function getVal(){ return await doSomethingAync(); } var ret = getVal(); console.log(ret); แต่นั่นไม่สอดคล้องกัน ... สมมติว่าdoSomethingAsync()ส่งคืนคำสัญญาและคีย์เวิร์ด await จะคืนค่าจากสัญญาไม่ใช่คำสัญญาจากนั้นฟังก์ชัน getVal ของฉันควรส่งคืนค่านั้นไม่ใช่คำสัญญาโดยปริยาย แล้วกรณีนี้คืออะไรกันแน่? ฟังก์ชันที่ทำเครื่องหมายโดยคำหลัก async ส่งคืนสัญญาโดยปริยายหรือเราควบคุมสิ่งที่ส่งคืนหรือไม่ บางทีถ้าเราไม่คืนของอย่างชัดเจนพวกเขาก็จะคืนสัญญาโดยปริยาย ... ? เพื่อให้ชัดเจนยิ่งขึ้นมีความแตกต่างระหว่างด้านบนและ function doSomethingAync(charlie) { return new Promise(function (resolve) { setTimeout(function () { resolve(charlie || 'yikes'); }, 100); }) } async function …

8
ts ฟังก์ชันหรือเมธอด async ใน ES5 / ES3 ต้องการตัวสร้าง "Promise"
สวัสดีฉันใช้ async / await ในโครงการ TypeScript ของฉัน แต่ฉันได้รับบันทึกนี้: [ts] ฟังก์ชันหรือวิธีการ async ใน ES5 / ES3 ต้องการตัวสร้าง "Promise" ตรวจสอบให้แน่ใจว่าคุณมีการประกาศสำหรับตัวสร้าง "Promise" หรือรวม "ES2015" ไว้ใน--libตัวเลือกของคุณ ฉันจะแก้ปัญหานั้นได้อย่างไร

2
เหตุใดฉันจึงควรสร้างการดำเนินการ async WebAPI แทนการซิงค์
ฉันมีการดำเนินการต่อไปนี้ใน Web API ที่ฉันสร้างขึ้น: // GET api/<controller> [HttpGet] [Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")] public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false) { return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh); } การเรียกใช้บริการเว็บนี้ทำผ่าน Jquery Ajax เรียกวิธีนี้: $.ajax({ url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter, type: "GET", dataType: "json", success: function …

9
เป็นไปได้หรือไม่ที่จะ“ รอผลตอบแทน DoSomethingAsync ()”
บล็อกตัวทำซ้ำปกติ (เช่น "ผลตอบแทน") ไม่เข้ากันกับ "async" และ "await" หรือไม่ สิ่งนี้ให้ความคิดที่ดีว่าฉันพยายามจะทำอะไร: async Task<IEnumerable<Foo>> Method(String [] Strs) { // I want to compose the single result to the final result, so I use the SelectMany var finalResult = UrlStrings.SelectMany(link => //i have an Urlstring Collection await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will …

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