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

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


4
คำสั่ง Sleep ใน T-SQL
มีวิธีเขียนคำสั่ง T-SQL เพื่อให้มันหลับช่วงระยะเวลาหนึ่งหรือไม่ ฉันกำลังเขียนบริการเว็บแบบอะซิงโครนัสและฉันต้องการให้สามารถทำการทดสอบบางอย่างเพื่อดูว่ารูปแบบอะซิงโครนัสนั้นจะทำให้ขยายได้มากขึ้นหรือไม่ เพื่อที่จะ "เยาะเย้ย" บริการภายนอกที่ช้าฉันต้องการที่จะสามารถเรียกเซิร์ฟเวอร์ SQL ที่มีสคริปต์ที่ทำงานช้า แต่จริงๆแล้วมันไม่ได้ประมวลผลอะไรมากมาย

4
WaitAll vs WhenAll
ความแตกต่างระหว่างTask.WaitAll()และTask.WhenAll()จาก Async CTP คืออะไร? คุณสามารถให้รหัสตัวอย่างเพื่อแสดงกรณีการใช้ที่แตกต่างกันได้หรือไม่?

2
เมื่อใช้ Task.Run อย่างถูกต้องและเมื่อรอเพียง async
Task.Runผมอยากจะขอให้คุณอยู่กับความเห็นของคุณเกี่ยวกับสถาปัตยกรรมที่ถูกต้องเมื่อใช้ ฉันกำลังประสบกับความล้าหลัง UI ในแอปพลิเคชัน WPF .NET 4.5 ของเรา (ด้วยกรอบ Caliburn Micro) โดยทั่วไปฉันกำลังทำ (ตัวอย่างโค้ดที่ง่ายมาก): public class PageViewModel : IHandle<SomeMessage> { ... public async void Handle(SomeMessage message) { ShowLoadingAnimation(); // Makes UI very laggy, but still not dead await this.contentLoader.LoadContentAsync(); HideLoadingAnimation(); } } public class ContentLoader { public async Task LoadContentAsync() { …

6
HttpClient.GetAsync (…) จะไม่กลับมาเมื่อใช้ await / async
แก้ไข: คำถามนี้ดูเหมือนว่าอาจเป็นปัญหาเดียวกัน แต่ไม่มีคำตอบ ... แก้ไข:ในกรณีทดสอบ 5 งานดูเหมือนจะติดอยู่ในWaitingForActivationสถานะ ฉันพบพฤติกรรมแปลก ๆ บางอย่างโดยใช้ System.Net.Http.HttpClient ใน. NET 4.5 - ที่ "รอ" ผลการโทรไปที่ (เช่น) httpClient.GetAsync(...)จะไม่กลับมา สิ่งนี้จะเกิดขึ้นในบางสถานการณ์เมื่อใช้ฟังก์ชันการทำงานของ async / await ใหม่และ Tasks API - รหัสดูเหมือนจะทำงานเมื่อใช้ต่อเนื่องเท่านั้น นี่คือโค้ดบางส่วนที่ทำให้เกิดปัญหาอีกครั้ง - วางสิ่งนี้ลงใน "MVC 4 WebApi โครงการใหม่" ใน Visual Studio 11 เพื่อแสดงปลายทาง GET ต่อไปนี้: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never …

4
ฉันจะ จำกัด Parallel.ForEach ได้อย่างไร
ฉันมีวงจร async Parallel.ForEach () ซึ่งฉันดาวน์โหลดบางเว็บเพจ แบนด์วิดท์ของฉันมี จำกัด ดังนั้นฉันจึงสามารถดาวน์โหลดได้เพียง x หน้าต่อครั้ง แต่ Parallel.ForEach ดำเนินการรายการทั้งหมดของเว็บเพจที่ต้องการ มีวิธี จำกัด หมายเลขเธรดหรือตัว จำกัด อื่นใดขณะเรียกใช้ Parallel.ForEach หรือไม่ รหัสตัวอย่าง: Parallel.ForEach(listOfWebpages, webpage => { Download(webpage); }); งานจริงไม่มีส่วนเกี่ยวข้องกับหน้าเว็บดังนั้นโซลูชันการรวบรวมข้อมูลบนเว็บที่สร้างสรรค์จะไม่ช่วยอะไร

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. */ …

7
จะปฏิเสธในรูปแบบ async / รอคอยไวยากรณ์ได้อย่างไร
ฉันจะปฏิเสธคำสัญญาที่ส่งคืนโดยฟังก์ชัน async / await ได้อย่างไร เช่นเดิม foo(id: string): Promise<A> { return new Promise((resolve, reject) => { someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400)) }); } แปลเป็น async / รอคอย async foo(id: string): Promise<A> { try{ await someAsyncPromise(); return 200; } catch(error) {//here goes if someAsyncPromise() rejected} return 400; //this will result in a resolved promise. }); …

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

14
การโทรกลับหลังจากการโทรกลับแบบอะซิงโครนัสทั้งหมดเสร็จสมบูรณ์
ตามที่ชื่อแนะนำ ฉันจะทำสิ่งนี้ได้อย่างไร ฉันต้องการโทรwhenAllDone()หลังจาก forEach-loop ผ่านแต่ละองค์ประกอบแล้วทำการประมวลผลแบบอะซิงโครนัส [1, 2, 3].forEach( function(item, index, array, done) { asyncFunction(item, function itemDone() { console.log(item + " done"); done(); }); }, function allDone() { console.log("All done"); whenAllDone(); } ); เป็นไปได้ไหมที่จะทำงานเช่นนี้? เมื่ออาร์กิวเมนต์ตัวที่สองสำหรับ forEach คือฟังก์ชันการเรียกกลับที่ทำงานเมื่อมันผ่านการวนซ้ำทั้งหมด? ผลลัพธ์ที่คาดหวัง: 3 done 1 done 2 done All done!

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

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

3
ทำความเข้าใจกับ dispatch_async
ฉันมีคำถามเกี่ยวกับรหัสนี้ dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; }); พารามิเตอร์แรกของรหัสนี้คือ dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) เรากำลังขอรหัสนี้เพื่อทำงานแบบอนุกรมในคิวทั่วโลกที่มีความหมายว่ามันจะส่งกลับพร้อมกันทั่วโลกคิวในระดับความสำคัญที่กำหนด? อะไรคือข้อดีของการใช้dispatch_get_global_queueคิวหลัก? ฉันสับสน. คุณช่วยฉันเข้าใจเรื่องนี้ให้ดีขึ้นได้ไหม

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; }

14
ทางเลือกใหม่ที่สะอาดและมีน้ำหนักเบาสำหรับ Python twisted [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิด5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ A (ยาว) เมื่อก่อนฉันเขียน web-spider ที่ฉันมัลติเธรดเพื่อเปิดใช้งานการร้องขอที่เกิดขึ้นพร้อมกันในเวลาเดียวกัน ที่อยู่ใน Python เยาวชนของฉันในวันก่อนที่ฉันรู้เกี่ยวกับGILและ woes ที่เกี่ยวข้องมันสร้างรหัส multithreaded (IE ส่วนใหญ่สิ่งที่เพิ่งจบอนุกรม!) ... ฉันต้องการทำงานซ้ำรหัสนี้เพื่อให้มีประสิทธิภาพมากขึ้นและทำงานได้ดีขึ้น โดยทั่วไปมีสองวิธีที่ฉันสามารถทำได้: ฉันสามารถใช้โมดูลมัลติโพรเซสซิงใหม่ใน 2.6+ หรือฉันสามารถใช้เครื่องปฏิกรณ์ / แบบจำลองเหตุการณ์ตามประเภทของบางอย่าง ฉันอยากจะทำในภายหลังเพราะมันง่ายกว่าและมีข้อผิดพลาดน้อยกว่า ดังนั้นคำถามที่เกี่ยวข้องกับกรอบที่จะเหมาะที่สุดกับความต้องการของฉัน ต่อไปนี้เป็นรายการตัวเลือกที่ฉันรู้เกี่ยวกับ: Twisted : ปู่ย่าตายายของกรอบเครื่องปฏิกรณ์ Python: ดูเหมือนซับซ้อนและป่องเล็กน้อย โค้งการเรียนรู้ที่สูงชันสำหรับงานเล็ก ๆ Eventlet : จากคนที่lindenlab เฟรมเวิร์กที่เป็นมิตรกับสิ่งแวดล้อมที่มุ่งไปที่งานประเภทนี้ ฉันได้ดูรหัสแล้วและมันก็ไม่สวยเกินไป: ไม่สอดคล้องกับ pep8, กระจัดกระจายไปด้วยภาพพิมพ์ (ทำไมผู้คนถึงทำแบบนี้ในกรอบ!?) …

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