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

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

2
ใช้เพื่อรอ ... จากพร้อมกับ iterables แบบซิงโครนัส
MDN กล่าวว่า for await...ofมีสองกรณีใช้งาน: for await...ofงบสร้างวงวนมากกว่า async iterable วัตถุเช่นเดียวกับ iterables ซิงค์, ... ผมก็ตระหนักก่อนหน้านี้ของอดีต: async iterables Symbol.asyncIteratorใช้ แต่ตอนนี้ฉันสนใจตอนหลัง: สามารถซิงโครไนซ์ได้ รหัสต่อไปนี้ซ้ำผ่าน iterable ซิงโครนัส - อาร์เรย์ของคำสัญญา ดูเหมือนว่าจะปิดกั้นความสำเร็จในการปฏิบัติตามสัญญาแต่ละข้อ async function asyncFunction() { try { const happy = new Promise((resolve)=>setTimeout(()=>resolve('happy'), 1000)) const sad = new Promise((_,reject)=>setTimeout(()=>reject('sad'))) const promises = [happy, sad] for await(const item of …

1
ฉันจะใส่ฟังก์ชั่น async ลงในแผนที่ใน Rust ได้อย่างไร
ฉันไม่สามารถจัดการกับฟังก์ชั่น async hyperเขียนเมื่อเราเตอร์สำหรับ รหัสนี้: use std::collections::HashMap; use std::future::Future; type BoxedResult<T> = Result<T, Box<dyn std::error::Error + Send + Sync>>; type CalcFn = Box<dyn Fn(i32, i32) -> dyn Future<Output = BoxedResult<i32>>>; async fn add(a: i32, b: i32) -> BoxedResult<i32> { Ok(a + b) } async fn sub(a: i32, b: i32) -> BoxedResult<i32> …
11 rust  async-await 

7
วิธีการบล็อกการไหลของรหัสจนกว่าเหตุการณ์จะเริ่มทำงานใน C #
ที่นี่เรามีด้วยGrid Buttonเมื่อผู้ใช้คลิกปุ่มวิธีการในคลาสยูทิลิตี้จะถูกดำเนินการซึ่งบังคับให้แอปพลิเคชันได้รับการคลิกบนกริด Gridการไหลของรหัสต้องหยุดที่นี่และไม่ได้ดำเนินต่อไปจนกว่าผู้ใช้มีการคลิกที่ ฉันมีคำถามที่คล้ายกันมาก่อนที่นี่: รอจนกระทั่งผู้ใช้คลิก C # WPF ในคำถามนั้นฉันได้รับคำตอบโดยใช้ async / คอยซึ่งใช้งานได้ แต่เนื่องจากฉันจะใช้เป็นส่วนหนึ่งของ API ฉันไม่ต้องการใช้ async / waitit เนื่องจากผู้บริโภคจะต้องทำเครื่องหมายวิธีการด้วย async ซึ่งฉันไม่ต้องการ ฉันจะเขียนUtility.PickPoint(Grid grid)วิธีเพื่อให้บรรลุเป้าหมายนี้ได้อย่างไร ฉันเห็นสิ่งนี้ซึ่งอาจช่วยได้ แต่ไม่เข้าใจอย่างเต็มที่ที่จะสมัครที่นี่เพื่อความซื่อสัตย์: การบล็อกจนกว่าเหตุการณ์จะเสร็จสิ้น พิจารณาว่าเป็นสิ่งที่ต้องการวิธี Console.ReadKey () ในแอปพลิเคชันคอนโซล เมื่อเราเรียกใช้เมธอดนี้โฟลว์โค้ดจะหยุดจนกว่าเราจะป้อนค่าบางค่า โปรแกรมดีบั๊กไม่ทำงานต่อไปจนกว่าเราจะป้อนข้อมูล ฉันต้องการพฤติกรรมที่แน่นอนสำหรับวิธี PickPoint () การไหลของรหัสจะหยุดจนกว่าผู้ใช้คลิกบนกริด <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition …

1
ส่งคืน IAsyncEnumerable <T> และ NotFound จาก Asp.Net Core Controller
อะไรคือลายเซ็นที่ถูกต้องสำหรับแอ็คชั่นคอนโทรลเลอร์ที่ส่งกลับค่าIAsyncEnumerable&lt;T&gt;a และ a NotFoundResultแต่ยังคงถูกประมวลผลในรูปแบบ async? ฉันใช้ลายเซ็นนี้และไม่ได้รวบรวมเพราะIAsyncEnumerable&lt;T&gt;ไม่สามารถรอได้: [HttpGet] public async Task&lt;IActionResult&gt; GetAll(Guid id) { try { return Ok(await repository.GetAll(id)); // GetAll() returns an IAsyncEnumerable } catch (NotFoundException e) { return NotFound(e.Message); } } อันนี้คอมไพล์ได้ดี แต่ลายเซ็นมันไม่ได้เป็นแบบซิงค์ ดังนั้นฉันกังวลว่าจะบล็อกเธรดพูลเธรดหรือไม่: [HttpGet] public IActionResult GetAll(Guid id) { try { return Ok(repository.GetAll(id)); // GetAll() returns an IAsyncEnumerable …

1
จะใช้ Rust async fn ที่ใช้การอ้างอิงเป็นการติดต่อกลับได้อย่างไร
async fnส่งคืนชนิดที่ไม่ระบุชื่อที่ใช้Futureดังนั้นหากเราต้องการใช้เป็นโทรกลับเราต้องแปลงค่าส่งคืนเป็นวัตถุลักษณะ ฉันพยายามเขียนฟังก์ชั่นการทำเช่นนี้ แต่ฉันมีปัญหาตลอดชีวิต async fnจะคืนค่าอายุการใช้งานของพารามิเตอร์ทั้งหมดดังนั้นลายเซ็นของการติดต่อกลับยังต้อง ฉันจะเพิ่มอายุการใช้งานในค่าส่งคืนของการโทรกลับได้อย่างไร use futures::future::{Future, FutureExt, LocalBoxFuture}; type Context = (); type AsyncCb = Box&lt;dyn for&lt;'r&gt; FnOnce(&amp;'r Context) -&gt; LocalBoxFuture&lt;'r, ()&gt;&gt;; fn normalize_async_cb&lt;Fut: Future&lt;Output = ()&gt;&gt;(f: for&lt;'r&gt; fn(&amp;'r Context) -&gt; Fut) -&gt; AsyncCb // how to add 'r for Fut? ^^^ { let cb = move …
10 rust  async-await 

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

3
จะประกาศภารกิจที่ยังไม่เริ่มต้นซึ่งจะรองานอื่นได้อย่างไร
ฉันทำการทดสอบหน่วยนี้แล้วและฉันไม่เข้าใจว่าทำไม "รอ Task.Delay ()" ไม่รอ! [TestMethod] public async Task SimpleTest() { bool isOK = false; Task myTask = new Task(async () =&gt; { Console.WriteLine("Task.BeforeDelay"); await Task.Delay(1000); Console.WriteLine("Task.AfterDelay"); isOK = true; Console.WriteLine("Task.Ended"); }); Console.WriteLine("Main.BeforeStart"); myTask.Start(); Console.WriteLine("Main.AfterStart"); await myTask; Console.WriteLine("Main.AfterAwait"); Assert.IsTrue(isOK, "OK"); } นี่คือผลลัพธ์ของการทดสอบหน่วย: สิ่งนี้เป็นไปได้อย่างไร "รอ" ไม่รอและเธรดหลักยังคงดำเนินต่อไป?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.