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

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

3
ฉันควรใช้เมธอด“ then” ของ jQuery deferred เมื่อไรและควรใช้เมธอด“ pipe” เมื่อใด
jQuery Deferredมีสองฟังก์ชั่นที่สามารถใช้เพื่อปรับใช้ฟังก์ชัน Chaining แบบอะซิงโครนัส: then() deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred doneCallbacksฟังก์ชันหรืออาร์เรย์ของฟังก์ชันที่เรียกเมื่อ Deferred ได้รับการแก้ไข failCallbacksฟังก์ชันหรืออาร์เรย์ของฟังก์ชันที่เรียกว่าเมื่อ Deferred ถูกปฏิเสธ pipe() deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise doneFilterฟังก์ชันทางเลือกที่ถูกเรียกใช้เมื่อ Deferred ได้รับการแก้ไข failFilterฟังก์ชันทางเลือกที่ถูกเรียกใช้เมื่อ Deferred ถูกปฏิเสธ ฉันรู้ว่าthen()ใช้เวลานานกว่าเล็กน้อยpipe()ดังนั้นอย่างหลังจึงต้องเพิ่มผลประโยชน์พิเศษบางอย่าง แต่สิ่งที่แตกต่างอย่างชัดเจนก็ทำให้ฉันหายไป ทั้งสองใช้พารามิเตอร์การเรียกกลับที่เหมือนกันแม้ว่าจะแตกต่างกันในชื่อและความแตกต่างระหว่างการส่งคืน a Deferredและส่งคืนPromiseดูเหมือนเล็กน้อย ฉันอ่านเอกสารอย่างเป็นทางการซ้ำแล้วซ้ำเล่า แต่มักจะพบว่ามัน "หนาแน่น" เกินไปที่จะคาดคั้นเอาไว้และการค้นหาก็พบว่ามีการอภิปรายเกี่ยวกับคุณลักษณะหนึ่งหรืออย่างอื่นมากมาย แต่ฉันไม่พบสิ่งใดที่ให้ความกระจ่างในความแตกต่าง ข้อดีข้อเสียของแต่ละข้อ ดังนั้นควรใช้thenเมื่อใดและควรใช้เมื่อpipeใด ส่วนที่เพิ่มเข้าไป คำตอบที่ยอดเยี่ยมของเฟลิกซ์ช่วยชี้แจงว่าฟังก์ชันทั้งสองนี้แตกต่างกันอย่างไร แต่ฉันสงสัยว่ามีบางครั้งที่การทำงานthen()ของpipe(). เห็นได้ชัดว่าpipe()มีพลังมากกว่าthen()และดูเหมือนว่าอดีตสามารถทำอะไรก็ได้ที่คนหลังทำได้ เหตุผลหนึ่งที่ต้องใช้then()อาจเป็นเพราะชื่อนี้สะท้อนให้เห็นถึงบทบาทของมันในขณะที่การสิ้นสุดของสายการทำงานที่ประมวลผลข้อมูลเดียวกัน แต่มีกรณีการใช้งานที่ต้องthen()ส่งคืนต้นฉบับDeferredที่ไม่สามารถทำได้pipe()เนื่องจากส่งคืนใหม่Promiseหรือไม่?

2
การห่อรหัสซิงโครนัสเป็นการโทรแบบอะซิงโครนัส
ฉันมีวิธีการในแอปพลิเคชัน ASP.NET ซึ่งใช้เวลาค่อนข้างมากในการดำเนินการ การเรียกใช้เมธอดนี้อาจเกิดขึ้นได้สูงสุด 3 ครั้งระหว่างคำขอของผู้ใช้หนึ่งครั้งขึ้นอยู่กับสถานะแคชและพารามิเตอร์ที่ผู้ใช้ระบุ การโทรแต่ละครั้งจะใช้เวลาประมาณ 1-2 วินาทีจึงจะเสร็จสมบูรณ์ วิธีนี้เป็นการโทรแบบซิงโครนัสไปยังบริการและไม่มีความเป็นไปได้ที่จะลบล้างการใช้งาน ดังนั้นการโทรแบบซิงโครนัสไปยังบริการจึงมีลักษณะดังนี้: public OutputModel Calculate(InputModel input) { // do some stuff return Service.LongRunningCall(input); } และการใช้วิธีการคือ (โปรดทราบว่าการเรียกใช้เมธอดนั้นอาจเกิดขึ้นมากกว่าหนึ่งครั้ง): private void MakeRequest() { // a lot of other stuff: preparing requests, sending/processing other requests, etc. var myOutput = Calculate(myInput); // stuff again } ฉันพยายามเปลี่ยนการใช้งานจากด้านข้างของฉันเพื่อให้สามารถใช้งานวิธีนี้ได้พร้อมกันและนี่คือสิ่งที่ฉันทำจนถึงตอนนี้ …

6
ฉันจะรอชุดฟังก์ชันการโทรกลับแบบอะซิงโครนัสได้อย่างไร
ฉันมีรหัสที่มีลักษณะเช่นนี้ใน javascript: forloop { //async call, returns an array to its callback } หลังจากการเรียก async ทั้งหมดเสร็จสิ้นฉันต้องการคำนวณค่าต่ำสุดของอาร์เรย์ทั้งหมด ฉันจะรอพวกเขาทั้งหมดได้อย่างไร? ความคิดเดียวของฉันตอนนี้คือการมีอาร์เรย์ของบูลีนที่เรียกว่า done และตั้งค่า done [i] เป็น true ในฟังก์ชัน callback ith แล้วพูดว่า while (ยังไม่เสร็จทั้งหมด) {} แก้ไข: ฉันคิดว่าวิธีแก้ปัญหาที่เป็นไปได้ แต่น่าเกลียดวิธีหนึ่งคือการแก้ไขอาร์เรย์ที่ทำเสร็จแล้วในการโทรกลับแต่ละครั้งจากนั้นเรียกใช้เมธอดหากมีการตั้งค่าอื่น ๆ ทั้งหมดจากการโทรกลับแต่ละครั้งดังนั้นการโทรกลับครั้งสุดท้ายที่จะเสร็จสมบูรณ์จะเรียกใช้วิธีการต่อเนื่อง ขอบคุณล่วงหน้า.

1
ประสิทธิภาพที่น่ากลัวโดยใช้วิธี SqlCommand Async ที่มีข้อมูลขนาดใหญ่
ฉันมีปัญหาด้านประสิทธิภาพการทำงานของ SQL ที่สำคัญเมื่อใช้การโทรแบบ async ฉันได้สร้างกรณีเล็ก ๆ เพื่อแสดงให้เห็นถึงปัญหา ฉันได้สร้างฐานข้อมูลบน SQL Server 2016 ซึ่งอยู่ใน LAN ของเรา (ไม่ใช่ localDB) ในฐานข้อมูลนั้นฉันมีตารางที่WorkingCopyมี 2 ​​คอลัมน์: Id (nvarchar(255, PK)) Value (nvarchar(max)) DDL CREATE TABLE [dbo].[Workingcopy] ( [Id] [nvarchar](255) NOT NULL, [Value] [nvarchar](max) NULL, CONSTRAINT [PK_Workingcopy] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, …

4
console.log ของ node.js เป็นแบบอะซิงโครนัสหรือไม่
อยู่console.log/debug/warn/errorใน asynchrounous Node.js? ฉันหมายความว่าจะหยุดการเรียกใช้โค้ดจาวาสคริปต์จนกว่าสิ่งต่างๆจะถูกพิมพ์บนหน้าจอหรือจะพิมพ์ในภายหลัง? นอกจากนี้ฉันสนใจที่จะทราบว่าเป็นไปได้หรือไม่ที่ console.log จะไม่แสดงอะไรเลยหากคำสั่งนั้นเกิดปัญหาขึ้นทันทีหลังจากที่โหนดขัดข้อง

10
ลำดับของการดำเนินการตัวจัดการเหตุการณ์
หากฉันตั้งค่าตัวจัดการเหตุการณ์หลายตัวเช่น: _webservice.RetrieveDataCompleted += ProcessData1; _webservice.RetrieveDataCompleted += ProcessData2; สิ่งที่สั่งซื้อจะถูกขนย้ายวัสดุทำงานเมื่อมีเหตุการณ์RetrieveDataCompletedยิง? พวกเขาทำงานในเธรดเดียวกันและเรียงตามลำดับตามลำดับที่ลงทะเบียนหรือไม่?

3
console.log () async หรือ sync?
ฉันกำลังอ่านAsync Javascriptโดย Trevor Burnham นี่เป็นหนังสือที่ยอดเยี่ยมมาก เขาพูดถึงตัวอย่างนี้และ console.log ว่าเป็น "async" ในคอนโซล Safari และ Chrome น่าเสียดายที่ฉันไม่สามารถจำลองสิ่งนี้ได้ นี่คือรหัส: var obj = {}; console.log(obj); obj.foo = 'bar'; // my outcome: Object{}; 'bar'; // The book outcome: {foo:bar}; ถ้านี่คือ async ฉันจะคาดหวังว่าผลลัพธ์จะเป็นหนังสือ console.log () ใส่ไว้ในคิวเหตุการณ์จนกว่าโค้ดทั้งหมดจะถูกเรียกใช้งานจากนั้นรันและจะมีคุณสมบัติ bar ดูเหมือนว่าจะทำงานพร้อมกัน ฉันใช้รหัสนี้ผิดหรือไม่? console.log เป็น async จริงหรือ?

5
ฉันควรกังวลเกี่ยวกับ "วิธีการ async นี้ไม่มีตัวดำเนินการ" รอ "และจะเรียกใช้คำเตือนพร้อมกัน"
ฉันมีอินเทอร์เฟซที่เปิดเผยวิธีการ async บางอย่าง โดยเฉพาะอย่างยิ่งมันมีวิธีการที่กำหนดไว้ซึ่งส่งคืน Task หรือ Task <T> ฉันใช้คำหลัก async / await ฉันอยู่ระหว่างการใช้งานอินเทอร์เฟซนี้ อย่างไรก็ตามในวิธีการเหล่านี้บางส่วนการนำไปใช้งานนี้ไม่มีอะไรต้องรอ ด้วยเหตุนี้ฉันจึงได้รับคำเตือนของคอมไพเลอร์ "วิธีการ async นี้ไม่มีตัวดำเนินการ 'รอ' และจะทำงานพร้อมกัน ... " ฉันเข้าใจว่าทำไมฉันถึงได้รับข้อผิดพลาด แต่ฉันสงสัยว่าฉันควรทำอะไรกับพวกเขาในบริบทนี้หรือไม่ รู้สึกผิดที่ละเลยคำเตือนของคอมไพเลอร์ ฉันรู้ว่าฉันสามารถแก้ไขได้โดยรองานเรียกใช้ แต่รู้สึกว่าผิดสำหรับวิธีการที่ใช้งานได้ไม่แพงเพียงไม่กี่อย่าง ดูเหมือนว่ามันจะเพิ่มค่าใช้จ่ายที่ไม่จำเป็นในการดำเนินการ แต่ฉันก็ไม่แน่ใจว่ามีอยู่แล้วหรือไม่เพราะมีคีย์เวิร์ด async อยู่ ฉันควรเพิกเฉยต่อคำเตือนหรือมีวิธีการแก้ไขที่ฉันไม่เห็นหรือไม่?

3
มันเป็นการต่อต้านรูปแบบที่จะใช้ async / await ภายในตัวสร้าง Promise () ใหม่หรือไม่?
ฉันกำลังใช้async.eachLimitฟังก์ชันเพื่อควบคุมจำนวนการดำเนินการสูงสุดในแต่ละครั้ง const { eachLimit } = require("async"); function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); }); } …

4
สถานะของ POSIX asynchronous I / O (AIO) คืออะไร?
มีเพจที่กระจายอยู่ทั่วเว็บที่อธิบายสิ่งอำนวยความสะดวก POSIX AIO ในรายละเอียดที่แตกต่างกัน ไม่มีสิ่งใดที่น่ากลัวล่าสุด ยังไม่ชัดเจนว่าพวกเขากำลังอธิบายอะไรกันแน่ ตัวอย่างเช่นเว็บไซต์ "อย่างเป็นทางการ" (?) สำหรับการสนับสนุน I / O แบบอะซิงโครนัสเคอร์เนลของ Linux ที่นี่บอกว่าซ็อกเก็ตไม่ทำงาน แต่หน้าคู่มือ "aio.h" บนเวิร์กสเตชัน Ubuntu 8.04.1 ของฉันทั้งหมดดูเหมือนจะบ่งบอกเป็นนัยว่า มันใช้งานได้กับตัวอธิบายไฟล์โดยพลการ จากนั้นมีโครงการอื่นที่ดูเหมือนว่าจะทำงานที่เลเยอร์ไลบรารีที่มีเอกสารประกอบน้อยกว่า ฉันต้องการทราบ: POSIX AIO มีจุดประสงค์อะไร? เนื่องจากตัวอย่างที่ชัดเจนที่สุดของการใช้งานที่ฉันพบบอกว่ามันไม่รองรับซ็อกเก็ตดูเหมือนว่าฉันจะแปลก ๆ เป็นเพียงสำหรับ async disk I / O หรือไม่ ถ้าเป็นเช่นนั้นเหตุใดจึงต้องใช้ API แบบไฮเปอร์ทั่วไป ถ้าไม่ทำไมดิสก์ I / O จึงเป็นสิ่งแรกที่ถูกโจมตี มีตัวอย่างโปรแกรม POSIX AIO ที่สมบูรณ์ที่ฉันสามารถดูได้ที่ไหน ไม่มีใครใช้จริงจริงหรือ? …
93 linux  asynchronous  posix  bsd  aio 

15
รับการแจ้งเตือนเมื่อ NSOperationQueue ทำงานทั้งหมดเสร็จสิ้น
NSOperationQueueมีwaitUntilAllOperationsAreFinishedแต่ฉันไม่ต้องการรอพร้อมกัน ฉันแค่ต้องการซ่อนตัวบ่งชี้ความคืบหน้าใน UI เมื่อคิวเสร็จสิ้น วิธีที่ดีที่สุดในการทำสิ่งนี้คืออะไร? ฉันไม่สามารถส่งการแจ้งเตือนจากNSOperations ของฉันได้เพราะฉันไม่รู้ว่าการแจ้งเตือนใดจะเป็นครั้งสุดท้ายและ[queue operations]อาจยังไม่ว่างเปล่า (หรือแย่กว่านั้นคือการเติมใหม่) เมื่อได้รับการแจ้งเตือน

11
การคืนข้อมูลจากการโทรแบบ async ในฟังก์ชัน Swift
ฉันได้สร้างคลาสยูทิลิตี้ในโครงการ Swift ของฉันที่จัดการคำขอ REST และการตอบกลับทั้งหมด ฉันได้สร้าง REST API อย่างง่ายเพื่อให้ฉันสามารถทดสอบโค้ดของฉันได้ ฉันได้สร้างเมธอดคลาสที่ต้องการส่งคืน NSArray แต่เนื่องจากการเรียก API เป็นแบบ async ฉันต้องส่งคืนจากเมธอดภายในการเรียก async ปัญหาคือ async คืนค่าเป็นโมฆะ ถ้าฉันทำสิ่งนี้ใน Node ฉันจะใช้สัญญา JS แต่ฉันไม่สามารถหาวิธีแก้ปัญหาที่ใช้ได้กับ Swift import Foundation class Bookshop { class func getGenres() -> NSArray { println("Hello inside getGenres") let urlPath = "http://creative.coventry.ac.uk/~bookshop/v1.1/index.php/genre/list" println(urlPath) let url: NSURL = NSURL(string: …
93 ios  rest  asynchronous  swift 

11
วิธีโหลด CSS Asynchronously
ฉันกำลังพยายามกำจัดไฟล์ CSS 2 ไฟล์ที่แสดงการบล็อกบนไซต์ของฉันซึ่งจะปรากฏใน Google Page Speed ​​Insights ฉันได้ทำตามวิธีการต่างๆ แต่ไม่มีวิธีใดที่ประสบความสำเร็จ แต่เมื่อเร็ว ๆ นี้ฉันพบโพสต์เกี่ยวกับThinking Asyncและเมื่อฉันใช้รหัสนี้<script async src="https://third-party.com/resource.js"></script>มันช่วยขจัดปัญหาได้ อย่างไรก็ตามหลังจากเผยแพร่เพจก็สูญเสียรูปแบบไป ฉันไม่แน่ใจเหมือนกันว่าเกิดอะไรขึ้นเพราะโค้ดใช้งานได้ แต่เป็นการจัดแต่งทรงผมหลังจากอัปโหลดที่ใช้ไม่ได้ ขอขอบคุณสำหรับความช่วยเหลือของคุณในเรื่องนี้ ขอบคุณ
93 html  css  asynchronous 

1
Nodejs vs SignalR: ทำไมเราต้องใช้จาวาสคริปต์ฝั่งเซิร์ฟเวอร์
ตั้งแต่ฉันรู้จัก Node.js ฉันก็เป็นแฟนของมันมาตลอด แต่วันนี้ฉันพบเกี่ยวกับSignalRซึ่งเป็นทางเลือกแบบอะซิงโครนัส - ปรับขนาดได้ - เรียลไทม์สำหรับ ASP.NET เท่าที่ฉันรู้ข้อได้เปรียบหลักของ Node.js เหนือ SignalR คือการแชร์โค้ดระหว่างไคลเอนต์ - เซิร์ฟเวอร์ (ข้อดีอีกอย่างคือมันข้ามแพลตฟอร์ม) และข้อได้เปรียบหลักของ SignalR คือเฟรมเวิร์กที่เป็นผู้ใหญ่มากกว่าและดีกว่า การสนับสนุนเครื่องมือ (IDE) ฉันจึงสงสัยว่าถ้า SignalR อยู่ที่นี่เราต้องการ Node.js บน Windows อีกต่อไปหรือไม่? มีข้อดีของ Node.js ที่ฉันไม่รู้หรือไม่?


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