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

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

7
เหตุใด setState จึงอยู่ใน reactjs Async แทนที่จะเป็น Sync
ฉันเพิ่งพบว่าในthis.setState()ฟังก์ชันreact ในส่วนประกอบใด ๆ เป็นแบบอะซิงโครนัสหรือเรียกว่าหลังจากเสร็จสิ้นฟังก์ชันที่ถูกเรียกใช้ ตอนนี้ฉันค้นหาและพบบล็อกนี้ ( setState () State Mutation Operation อาจซิงโครนัสใน ReactJS ) ที่นี่เขาพบว่าsetStateเป็น async (เรียกว่าเมื่อ stack ว่างเปล่า) หรือ sync (เรียกทันทีที่เรียก) ขึ้นอยู่กับว่าการเปลี่ยนสถานะถูกกระตุ้นอย่างไร ตอนนี้สองสิ่งนี้ย่อยยาก ในบล็อกsetStateฟังก์ชันถูกเรียกใช้ภายในฟังก์ชันupdateStateแต่สิ่งที่เรียกใช้updateStateฟังก์ชันนั้นไม่ใช่สิ่งที่ฟังก์ชันที่เรียกว่าจะรู้ ทำไมพวกเขาถึงทำให้setStateasync เป็น JS เป็นภาษาเธรดเดียวและ setState นี้ไม่ใช่การเรียกใช้ WebAPI หรือเซิร์ฟเวอร์ดังนั้นต้องทำในเธรดของ JS เท่านั้น พวกเขาทำเช่นนี้เพื่อให้ Re-Rendering ไม่หยุดผู้ฟังเหตุการณ์และสิ่งของทั้งหมดหรือมีปัญหาด้านการออกแบบอื่น ๆ

19
โหลดสคริปต์แบบอะซิงโครนัส
ฉันใช้ปลั๊กอินหลายตัววิดเจ็ตแบบกำหนดเองและไลบรารีอื่น ๆ จาก JQuery ส่งผลให้ฉันมีไฟล์. js และ. css หลายไฟล์ ฉันต้องการสร้างตัวโหลดสำหรับไซต์ของฉันเนื่องจากต้องใช้เวลาพอสมควรในการโหลด จะเป็นการดีถ้าฉันสามารถแสดงตัวโหลดก่อนที่จะนำเข้าทั้งหมด: <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="js/myFunctions.js"></script> <link type="text/css" href="css/main.css" rel="stylesheet" /> ... .... etc ฉันพบบทเรียนหลายอย่างที่ช่วยให้ฉันสามารถนำเข้าไลบรารี JavaScript แบบอะซิงโครนัสได้ ตัวอย่างเช่นฉันสามารถทำสิ่งต่างๆเช่น: (function () { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'js/jquery-ui-1.8.16.custom.min.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, …

7
socket.shutdown กับ socket.close
ฉันเพิ่งเห็นรหัสเล็กน้อยที่มีลักษณะเช่นนี้ (แน่นอนว่าถุงเท้าเป็นวัตถุซ็อกเก็ต): sock.shutdown(socket.SHUT_RDWR) sock.close() จุดประสงค์ของการเรียกการปิดระบบบนซ็อกเก็ตแล้วปิดมันคืออะไร? หากสร้างความแตกต่างซ็อกเก็ตนี้จะถูกใช้สำหรับ IO ที่ไม่ปิดกั้น

8
SyntaxError: ฟังก์ชันโทเค็นที่ไม่คาดคิด - Async Await Nodejs
ฉันกำลังทดลองใช้ Node เวอร์ชัน6.2.1กับโค้ดบางส่วนของฉัน มีแผนที่จะย้ายรหัสที่เน้นการโทรกลับแบบไฮเปอร์ส่วนใหญ่ไปยังสิ่งที่ดูสะอาดกว่าและอาจทำงานได้ดีกว่า ฉันไม่รู้ว่าทำไมเทอร์มินัลแสดงข้อผิดพลาดเมื่อฉันพยายามรันโค้ดโหนด helloz.js (async function testingAsyncAwait() { await console.log("Print me!"); })(); Logs- BOZZMOB-M-T0HZ:rest bozzmob$ node helloz.js /Users/bozzmob/Documents/work/nextgennms/rest/helloz.js:1 (function (exports, require, module, __filename, __dirname) { (async function testingAsyncAwait() { ^^^^^^^^ SyntaxError: Unexpected token function at Object.exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:513:28) at Object.Module._extensions..js (module.js:550:10) at Module.load (module.js:458:32) at tryModuleLoad …

10
จะตัดการเรียกฟังก์ชัน async ลงในฟังก์ชัน sync ใน Node.js หรือ Javascript ได้อย่างไร
สมมติว่าคุณรักษาห้องสมุดที่ exposes getDataฟังก์ชัน ผู้ใช้ของคุณเรียกสิ่งนี้ว่ารับข้อมูลจริง: ข้อมูล var output = getData(); Under the hood จะถูกบันทึกไว้ในไฟล์เพื่อให้คุณใช้งานgetDataโดยใช้ Node.js ในfs.readFileSyncตัว เห็นได้ชัดทั้งคู่getDataและfs.readFileSyncเป็นฟังก์ชันการซิงค์ วันหนึ่งคุณได้รับคำสั่งให้เปลี่ยนแหล่งข้อมูลพื้นฐานเป็น repo เช่น MongoDB ซึ่งสามารถเข้าถึงได้แบบอะซิงโครนัสเท่านั้น นอกจากนี้คุณยังได้รับคำสั่งให้หลีกเลี่ยงการทำให้ผู้ใช้ของคุณgetDataขุ่นเคืองไม่สามารถเปลี่ยน API ให้กลับมาเป็นเพียงคำสัญญาหรือเรียกร้องพารามิเตอร์การเรียกกลับ คุณมีคุณสมบัติตามข้อกำหนดทั้งสองอย่างไร ฟังก์ชันอะซิงโครนัสโดยใช้การเรียกกลับ / สัญญาคือ DNA ของ JavasSript และ Node.js แอป JS ที่ไม่สำคัญใด ๆ อาจจะเต็มไปด้วยรูปแบบการเข้ารหัสนี้ แต่การปฏิบัตินี้สามารถนำไปสู่สิ่งที่เรียกว่าปิรามิดแห่งการลงโทษได้อย่างง่ายดาย ยิ่งไปกว่านั้นหากรหัสใด ๆ ในผู้โทรใด ๆ ในสายการโทรขึ้นอยู่กับผลลัพธ์ของฟังก์ชัน async รหัสเหล่านั้นจะต้องถูกรวมไว้ในฟังก์ชันการโทรกลับเช่นกันซึ่งเป็นการกำหนดข้อ จำกัด รูปแบบการเข้ารหัสสำหรับผู้โทร ในบางครั้งฉันพบว่าจำเป็นต้องห่อหุ้มฟังก์ชัน async …

4
โหนด JS Promise.all และ forEach
ฉันมีโครงสร้างเหมือนอาร์เรย์ที่เปิดเผยเมธอด async เมธอด async เรียกใช้โครงสร้างอาร์เรย์ที่ส่งคืนซึ่งจะแสดงวิธีการ async มากขึ้น ฉันกำลังสร้างออบเจ็กต์ JSON อื่นเพื่อเก็บค่าที่ได้รับจากโครงสร้างนี้ดังนั้นฉันจึงต้องระมัดระวังในการติดตามการอ้างอิงในการเรียกกลับ ฉันได้เขียนโค้ดวิธีแก้ปัญหาแบบเดรัจฉานแล้ว แต่ฉันต้องการเรียนรู้วิธีแก้ปัญหาที่เป็นสำนวนหรือสะอาดกว่านี้ รูปแบบควรทำซ้ำได้สำหรับ n ระดับของการทำรัง ฉันจำเป็นต้องใช้คำมั่นสัญญาทั้งหมดหรือเทคนิคบางอย่างที่คล้ายกันเพื่อพิจารณาว่าเมื่อใดควรแก้ไขรูทีนการปิดล้อม ไม่ใช่ทุกองค์ประกอบที่จำเป็นต้องเกี่ยวข้องกับการโทรแบบ async ดังนั้นในสัญญาที่ซ้อนกันทั้งหมดฉันไม่สามารถกำหนดองค์ประกอบอาร์เรย์ JSON ของฉันตามดัชนีได้ อย่างไรก็ตามฉันจำเป็นต้องใช้บางอย่างเช่นคำสัญญาทั้งหมดในที่ซ้อนกัน forEach เพื่อให้แน่ใจว่ามีการกำหนดคุณสมบัติทั้งหมดก่อนที่จะแก้ไขรูทีนการปิดล้อม ฉันใช้ bluebird สัญญา lib แต่นี่ไม่ใช่ข้อกำหนด นี่คือรหัสบางส่วน - var jsonItems = []; items.forEach(function(item){ var jsonItem = {}; jsonItem.name = item.name; item.getThings().then(function(things){ // or Promise.all(allItemGetThingCalls, function(things){ things.forEach(function(thing, index){ …

6
วิธีอ่านไฟล์ด้วย async / await อย่างถูกต้อง?
ฉันคิดไม่ออกว่าasync/ awaitทำงานอย่างไร ฉันเข้าใจเล็กน้อย แต่ไม่สามารถใช้งานได้ function loadMonoCounter() { fs.readFileSync("monolitic.txt", "binary", async function(err, data) { return await new Buffer( data); }); } module.exports.read = function() { console.log(loadMonoCounter()); }; ฉันรู้ว่าฉันสามารถใช้ได้readFileSyncแต่ถ้าฉันทำได้ฉันรู้ว่าฉันจะไม่เข้าใจasync/ awaitและฉันจะฝังปัญหา เป้าหมาย: เรียกloadMonoCounter()และส่งคืนเนื้อหาของไฟล์ ไฟล์นั้นจะเพิ่มขึ้นทุกครั้งที่incrementMonoCounter()เรียก (ทุกครั้งที่โหลดหน้า) ไฟล์นี้มีการถ่ายโอนข้อมูลของบัฟเฟอร์ในไบนารีและถูกเก็บไว้ใน SSD ไม่ว่าฉันจะทำอะไรฉันได้รับข้อผิดพลาดหรือundefinedในคอนโซล

9
nodeJs callbacks ตัวอย่างง่ายๆ
ใครช่วยยกตัวอย่างง่ายๆของการเรียกกลับ nodeJs ฉันได้ค้นหาสิ่งเดียวกันนี้ในหลายเว็บไซต์ แต่ไม่สามารถเข้าใจได้อย่างถูกต้องโปรดยกตัวอย่างง่ายๆให้ฉัน getDbFiles(store, function(files){ getCdnFiles(store, function(files){ }) }) ฉันอยากทำอะไรแบบนั้น ...

10
ฉันจะรันคำสั่งภายนอกแบบอะซิงโครนัสจาก Python ได้อย่างไร
ฉันต้องการเรียกใช้คำสั่งเชลล์แบบอะซิงโครนัสจากสคริปต์ Python ด้วยเหตุนี้ฉันหมายความว่าฉันต้องการให้สคริปต์ Python ของฉันทำงานต่อไปในขณะที่คำสั่งภายนอกดับลงและทำทุกอย่างที่ต้องทำ ฉันอ่านโพสต์นี้: เรียกคำสั่งภายนอกใน Python จากนั้นฉันก็ออกไปและทำการทดสอบและดูเหมือนว่าos.system()จะทำงานได้หากฉันใช้&ในตอนท้ายของคำสั่งเพื่อที่ฉันจะได้ไม่ต้องรอให้มันกลับมา สิ่งที่ฉันสงสัยคือว่านี่เป็นวิธีที่เหมาะสมในการทำสิ่งนั้นให้สำเร็จหรือไม่? ฉันลองแล้วcommands.call()แต่มันไม่ได้ผลสำหรับฉันเพราะมันบล็อกคำสั่งภายนอก โปรดแจ้งให้เราทราบหากos.system()แนะนำให้ใช้เส้นทางนี้หรือควรลองเส้นทางอื่น

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 …

5
จะใช้คุณสมบัติ Can CancelToken ได้อย่างไร?
เมื่อเทียบกับรหัสก่อนหน้าสำหรับคลาส RulyCancelerฉันต้องการเรียกใช้โค้ดโดยใช้ CancellationTokenSource. ฉันจะใช้มันตามที่ระบุไว้ในโทเค็นการยกเลิกได้อย่างไรโดยไม่ต้องโยน / จับข้อยกเว้น ฉันสามารถใช้IsCancellationRequestedทรัพย์สินได้หรือไม่? ฉันพยายามใช้มันในลักษณะนี้: cancelToken.ThrowIfCancellationRequested(); และ try { new Thread(() => Work(cancelSource.Token)).Start(); } catch (OperationCanceledException) { Console.WriteLine("Canceled!"); } แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดรันไทม์cancelToken.ThrowIfCancellationRequested();ในวิธีการWork(CancellationToken cancelToken): System.OperationCanceledException was unhandled Message=The operation was canceled. Source=mscorlib StackTrace: at System.Threading.CancellationToken.ThrowIfCancellationRequested() at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33 at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22 at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at …

8
ฉันจะเรียกใช้การเรียกกลับแบบอะซิงโครนัสใน Playground ได้อย่างไร
วิธีการ Cocoa และ CocoaTouch จำนวนมากมีการเรียกกลับที่สมบูรณ์ซึ่งนำไปใช้เป็นบล็อกใน Objective-C และ Closures ใน Swift อย่างไรก็ตามเมื่อลองใช้สิ่งเหล่านี้ใน Playground จะไม่มีการเรียกความสมบูรณ์ ตัวอย่างเช่น: // Playground - noun: a place where people can play import Cocoa import XCPlayground let url = NSURL(string: "http://stackoverflow.com") let request = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue.currentQueue() { response, maybeData, error in // This block never gets …

1
async (launch :: async) ใน C ++ 11 ทำให้เธรดพูลล้าสมัยเนื่องจากหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่
มันเกี่ยวข้องกับคำถามนี้อย่างหลวม ๆ : std :: thread รวมอยู่ใน C ++ 11 หรือไม่? . แม้ว่าคำถามจะแตกต่างกัน แต่ความตั้งใจก็เหมือนกัน: คำถามที่ 1: การใช้เธรดพูลของคุณเอง (หรือไลบรารีของบุคคลที่สาม) เพื่อหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่ ข้อสรุปในคำถามอื่นคือคุณไม่สามารถพึ่งพาstd::threadการรวมกลุ่มกันได้ (อาจเป็นหรือไม่ก็ได้) อย่างไรก็ตามstd::async(launch::async)ดูเหมือนว่าจะมีโอกาสสูงกว่าที่จะถูกรวมกลุ่ม ไม่คิดว่าจะถูกบังคับโดยมาตรฐาน แต่ IMHO ฉันคาดหวังว่าการใช้งาน C ++ 11 ที่ดีทั้งหมดจะใช้การรวมเธรดหากการสร้างเธรดช้า เฉพาะบนแพลตฟอร์มที่มีราคาไม่แพงในการสร้างเธรดใหม่ฉันคาดหวังว่าพวกเขาจะสร้างเธรดใหม่เสมอ คำถาม 2: นี่เป็นเพียงสิ่งที่ฉันคิด แต่ฉันไม่มีข้อเท็จจริงที่จะพิสูจน์ได้ ฉันอาจจะเข้าใจผิด เป็นการคาดเดาที่มีการศึกษาหรือไม่? สุดท้ายนี้ฉันได้ให้โค้ดตัวอย่างที่แสดงให้เห็นก่อนว่าฉันคิดว่าการสร้างเธรดสามารถแสดงได้อย่างไรasync(launch::async): ตัวอย่างที่ 1: thread t([]{ f(); }); // ... t.join(); กลายเป็น auto future …

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: ทำการ …

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