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

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

2
ฟังก์ชั่น Async ในมอคค่าก่อน () จะเสร็จสิ้นก่อนที่มัน () spec?
ฉันมีฟังก์ชันโทรกลับbefore()ซึ่งใช้สำหรับล้างฐานข้อมูล ทุกอย่างbefore()รับประกันว่าจะเสร็จสิ้นก่อนit()เริ่มหรือไม่? before(function(){ db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()? }); it('test spec', function(done){ // do the test }); after(function(){ });


11
คำจำกัดความของ "เหตุการณ์อะซิงโครนัส" ที่เข้าใจง่าย? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ปิดให้บริการใน2 ปีที่ผ่านมา ล็อค คำถามนี้และคำตอบถูกล็อกเนื่องจากคำถามไม่ตรงประเด็น แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ยังไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันเคยเจอคำนี้บ่อยมากและแม้กระทั่งหลังจาก Googling ก็ยังไม่เข้าใจว่ามันหมายถึงอะไร มีคำจำกัดความที่เข้าใจง่าย (อย่างดีพร้อมตัวอย่าง) ของเหตุการณ์แบบอะซิงโครนัสที่ใครบางคนสามารถให้ได้หรือไม่? ขอบคุณ!

3
จะจัดการกับ if-else ในสัญญาได้อย่างไร?
ในบางกรณีเมื่อฉันได้รับค่าส่งคืนจากวัตถุสัญญาฉันต้องเริ่มต้นพรีเซสสองรายการที่แตกต่างกันthen()ขึ้นอยู่กับเงื่อนไขของค่าเช่น: promise().then(function(value){ if(//true) { // do something } else { // do something } }) ฉันคิดว่าอาจจะเขียนได้ว่า: promise().then(function(value){ if(//true) { // call a new function which will return a new promise object ifTruePromise().then(); } else { ifFalsePromise().then(); } }) แต่ด้วยสิ่งนี้ฉันมีสองคำถาม: ฉันไม่แน่ใจว่าเป็นความคิดที่ดีหรือไม่ที่จะเริ่มต้นสัญญาใหม่จากนั้นดำเนินการตามคำสัญญา จะเกิดอะไรขึ้นถ้าฉันต้องการให้สองกระบวนการเรียกใช้ฟังก์ชันหนึ่งในครั้งสุดท้าย? หมายความว่ามี "ขั้ว" เดียวกัน ฉันพยายามที่จะคืนสัญญาใหม่เพื่อรักษาห่วงโซ่เดิมเช่น: promise().then(function(value){ if(//true) { // call …

3
Multi-async ใน Entity Framework 6?
นี่คือรหัสของฉัน: var banner = context.Banners.ToListAsync() var newsGroup = context.NewsGroups.ToListAsync() await Task.WhenAll(banner, newsGroup); แต่เมื่อฉันเรียกใช้ฟังก์ชันจากคอนโทรลเลอร์ มันแสดงข้อผิดพลาด การดำเนินการที่สองเริ่มต้นในบริบทนี้ก่อนที่การดำเนินการแบบอะซิงโครนัสก่อนหน้านี้จะเสร็จสมบูรณ์ ใช้ 'await' เพื่อให้แน่ใจว่าการดำเนินการแบบอะซิงโครนัสเสร็จสิ้นก่อนที่จะเรียกใช้เมธอดอื่นในบริบทนี้ ไม่รับประกันว่าสมาชิกอินสแตนซ์ใด ๆ จะปลอดภัยต่อเธรด โปรดช่วยฉันแก้ปัญหานี้

1
Async POST ล้มเหลวใน WP7 และ F #
เมื่อฉันทำlet! read = from.AsyncRead bufใน F # มันจะบล็อกและไม่กลับมาจนกว่าซ็อกเก็ต TCP จะตาย ทำไม? และฉันจะแก้ไขได้อย่างไร? รหัส: module StreamUtil open System.IO /// copy from 'from' stream to 'toStream' let (|>>) (from : Stream) (toStream : Stream) = let buf = Array.zeroCreate<byte> 1024 let rec doBlock () = async { let! read = from.AsyncRead buf …

8
การเรียกฟังก์ชันแบบอะซิงโครนัสใน PHP
ฉันกำลังทำงานกับเว็บแอปพลิเคชัน PHP และฉันจำเป็นต้องดำเนินการกับเครือข่ายบางอย่างในคำขอเช่นดึงคนจากเซิร์ฟเวอร์ระยะไกลตามคำขอของผู้ใช้ เป็นไปได้ไหมที่จะจำลองพฤติกรรมแบบอะซิงโครนัสใน PHP เนื่องจากฉันต้องส่งข้อมูลบางส่วนไปยังฟังก์ชันและต้องการผลลัพธ์จากมัน รหัสของฉันเหมือน: <?php $data1 = processGETandPOST(); $data2 = processGETandPOST(); $data3 = processGETandPOST(); $response1 = makeNetworkCall($data1); $response2 = makeNetworkCall($data2); $response3 = makeNetworkCall($data3); processNetworkResponse($response1); processNetworkResponse($response2); processNetworkResponse($response3); /*HTML and OTHER UI STUFF HERE*/ exit; ?> การดำเนินการเครือข่ายแต่ละครั้งจะใช้เวลาประมาณ 5 วินาทีในการดำเนินการเพิ่มรวม 15 วินาทีให้กับเวลาตอบสนองของแอปพลิเคชันของฉันเนื่องจากฉันส่งคำขอ 3 ครั้ง ฟังก์ชัน makeNetworkCall () ทำตามคำขอ HTTP POST …

9
รอคอยในการสกัดกั้น
ฉันมีรหัสต่อไปนี้: WebClient wc = new WebClient(); string result; try { result = await wc.DownloadStringTaskAsync( new Uri( "http://badurl" ) ); } catch { result = await wc.DownloadStringTaskAsync( new Uri( "http://fallbackurl" ) ); } โดยทั่วไปฉันต้องการดาวน์โหลดจาก URL และเมื่อล้มเหลวโดยมีข้อยกเว้นฉันต้องการดาวน์โหลดจาก URL อื่น ทั้งสองเวลาไม่ตรงกันแน่นอน อย่างไรก็ตามรหัสไม่ได้รวบรวมเนื่องจาก ข้อผิดพลาด CS1985: ไม่สามารถรอในเนื้อหาของประโยค catch ตกลงห้ามไม่ว่าด้วยเหตุผลใด แต่รูปแบบรหัสที่ถูกต้องนี่คืออะไร แก้ไข: ข่าวดีก็คือว่าC # 6.0 มีแนวโน้มที่จะช่วยให้สายรอคอยทั้งในและในที่สุดก็จับบล็อก

2
จะใช้ Tornado เมื่อใดและอย่างไร ไร้ประโยชน์เมื่อไหร่
โอเค Tornado ไม่ปิดกั้นและค่อนข้างเร็วและสามารถจัดการคำขอยืนจำนวนมากได้อย่างง่ายดาย แต่ฉันเดาว่ามันไม่ใช่กระสุนเงินและถ้าเราแค่เรียกใช้ Django-based หรือไซต์อื่น ๆ ที่มี Tornado แบบสุ่มสี่สุ่มห้ามันจะไม่เพิ่มประสิทธิภาพใด ๆ ฉันไม่พบคำอธิบายที่ครอบคลุมเกี่ยวกับเรื่องนี้ดังนั้นฉันจึงถามที่นี่: ควรใช้ Tornado เมื่อใด ไร้ประโยชน์เมื่อไหร่ เมื่อใช้มันควรคำนึงถึงอะไรบ้าง? เราจะสร้างไซต์ที่ไม่มีประสิทธิภาพโดยใช้ Tornado ได้อย่างไร? มีเซิร์ฟเวอร์และเว็บเฟรมเวิร์ค เราควรใช้กรอบงานเมื่อใดและเราจะแทนที่ด้วยกรอบงานอื่นได้เมื่อใด

3
จะหลีกเลี่ยงการละเมิดหลักการ DRY ได้อย่างไรเมื่อคุณต้องมีโค้ดทั้ง async และ sync?
ฉันกำลังทำงานในโครงการที่ต้องการสนับสนุนทั้ง async และ sync version ของตรรกะ / วิธีการเดียวกัน ตัวอย่างเช่นฉันต้องมี: public class Foo { public bool IsIt() { using (var conn = new SqlConnection(DB.ConnString)) { return conn.Query<bool>("SELECT IsIt FROM SomeTable"); } } public async Task<bool> IsItAsync() { using (var conn = new SqlConnection(DB.ConnString)) { return await conn.QueryAsync<bool>("SELECT IsIt FROM SomeTable"); } …
15 c#  .net  asynchronous 

1
ด้วยสัญญาทำไมเบราว์เซอร์กลับปฏิเสธสองครั้ง แต่ไม่ได้รับการแก้ไขสองครั้ง?
ฉันมีปัญหาในการทำความเข้าใจ promisesjavaScript ฉันเขียนรหัสต่อไปนี้: var p = new Promise(function(resolve,reject){ reject(Error("hello world")); }); setTimeout(()=>p.catch(e=>console.log(e)),5000); ฉันเห็นสิ่งนี้ในคอนโซลนักพัฒนาซอฟต์แวร์ Chrome ทันที: แต่หลังจากฉันรอ 5 วินาทีข้อความจะเปลี่ยนเป็นสีดำเหมือนภาพนี้โดยอัตโนมัติ: ฉันไม่เคยเห็นพฤติกรรมนี้มาก่อนระหว่างรหัส javaScript ของฉันและคอนโซลนักพัฒนาซอฟต์แวร์ซึ่งรหัส javaScript ของฉันสามารถ "แก้ไขเนื้อหาที่มีอยู่" ในคอนโซลนักพัฒนาซอฟต์แวร์ ดังนั้นฉันตัดสินใจที่จะดูว่าสถานการณ์เดียวกันเกิดขึ้นกับresolveการเขียนรหัสนี้: var p = new Promise(function(resolve,reject){ resolve("hello world"); }); setTimeout(()=>p.then(e=>console.log(e)),5000); แต่ในสถานการณ์นี้คอนโซลนักพัฒนาซอฟต์แวร์ของฉันจะไม่แสดงผลใด ๆ จนกว่าจะถึง 5 วินาทีหลังจากนั้นซึ่งจะพิมพ์hello worldออกมา ทำไมresolveและrejectได้รับการปฏิบัติที่แตกต่างกันในแง่ของเมื่อพวกเขาถูกเรียก? EXTRA ฉันยังเขียนรหัสนี้: var p = new Promise(function(resolve,reject){ reject(Error("hello …

2
รูปแบบสำหรับการมอบหมายพฤติกรรมการซิงค์ใน C #
ฉันพยายามออกแบบคลาสที่เปิดเผยความสามารถในการเพิ่มความกังวลในการประมวลผลแบบอะซิงโครนัส ในการเขียนโปรแกรมแบบซิงโครนัสอาจมีลักษณะเช่นนี้ public class ProcessingArgs : EventArgs { public int Result { get; set; } } public class Processor { public event EventHandler<ProcessingArgs> Processing { get; } public int Process() { var args = new ProcessingArgs(); Processing?.Invoke(args); return args.Result; } } var processor = new Processor(); processor.Processing += args => …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.