Questions tagged «async-await»

这涵盖了使用async和await关键字的各种编程语言支持的异步编程模型。

3
等待vs Task.Wait-死锁?
我不太明白之间的差别Task.Wait和await。 我在ASP.NET WebAPI服务中具有类似于以下功能的内容: public class TestController : ApiController { public static async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() { return await Bar(); } // GET api/test public IEnumerable<string> Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x => …


9
在Parallel.ForEach中嵌套等待
在Metro应用程序中,我需要执行许多WCF调用。需要进行大量调用,因此我需要在并行循环中进行调用。问题在于并行循环在WCF调用全部完成之前退出。 您将如何重构它以使其按预期工作? var ids = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; var customers = new System.Collections.Concurrent.BlockingCollection<Customer>(); Parallel.ForEach(ids, async i => { ICustomerRepo repo = new CustomerRepo(); var cust = await repo.GetCustomer(i); customers.Add(cust); }); foreach ( var customer in customers ) { Console.WriteLine(customer.ID); …

6
如何在顶层使用异步/等待?
我一直在浏览async/ await在浏览了几篇文章之后,我决定自己测试一下。但是,我似乎无法绕开为什么这行不通的想法: async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text); 控制台输出以下内容(节点v8.6.0): >外部:[对象承诺] >内部:嘿 为什么函数内部的日志消息随后执行?我认为创建async/ 的原因await是为了使用异步任务执行同步执行。 有没有办法可以使用函数内部返回的值而不使用.then()after main()?


3
如何在Node.js UnhandledPromiseRejectionWarning中查找未处理的承诺?
版本7中的Node.js具有用于处理promise的async / await语法糖,现在在我的代码中经常出现以下警告: (node:11057) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: Error: Can't set headers after they are sent. (node:11057) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 不幸的是,没有提到丢失渔获物的那一行。有没有找到所有方法而不检查每个try / catch块的方法?


5
对Array.map使用异步等待
给出以下代码: var arr = [1,2,3,4,5]; var results: number[] = await arr.map(async (item): Promise<number> => { await callAsynchronousOperation(item); return item + 1; }); 产生以下错误: TS2322:类型'Promise <number> []'无法分配给类型'number []'。类型“ Promise <数字>”不可分配给类型“数字”。 我该如何解决?怎样才能让async await和Array.map一起工作?

14
异步/等待类构造函数
目前,我正在尝试async/await在类构造函数中使用。这样一来,我就可e-mail以为正在从事的Electron项目获取自定义标签。 customElements.define('e-mail', class extends HTMLElement { async constructor() { super() let uid = this.getAttribute('data-uid') let message = await grabUID(uid) const shadowRoot = this.attachShadow({mode: 'open'}) shadowRoot.innerHTML = ` <div id="email">A random email message has appeared. ${message}</div> ` } }) 但是,此项目目前无法正常工作,并出现以下错误: Class constructor may not be an async method 有没有办法避免这种情况,以便我可以在其中使用异步/等待?而不是需要回调或.then()?

4
异步/等待与BackgroundWorker
在过去的几天中,我测试了.net 4.5和c#5的新功能。 我喜欢它的新异步/等待功能。之前,我曾使用BackgroundWorker通过响应UI在后台处理更长的进程。 我的问题是:有了这些不错的新功能之后,什么时候应该使用async / await以及什么时候使用BackgroundWorker?两者都有哪些常见方案?

4
Parallel.ForEach与Task.Run和Task.WhenAll
使用Parallel.ForEach或Task.Run()异步启动一组任务之间有什么区别? 版本1: List<string> strings = new List<string> { "s1", "s2", "s3" }; Parallel.ForEach(strings, s => { DoSomething(s); }); 版本2: List<string> strings = new List<string> { "s1", "s2", "s3" }; List<Task> Tasks = new List<Task>(); foreach (var s in strings) { Tasks.Add(Task.Run(() => DoSomething(s))); } await Task.WhenAll(Tasks);

8
禁止显示“警告CS4014:因为未等待此调用,所以将继续执行当前方法…”
这不是“如何在不等待的情况下安全地在C#中调用异步方法”的重复。 如何很好地抑制以下警告? 警告CS4014:由于未等待此调用,因此在调用完成之前将继续执行当前方法。考虑将“ await”运算符应用于调用结果。 一个简单的例子: static async Task WorkAsync() { await Task.Delay(1000); Console.WriteLine("Done!"); } static async Task StartWorkAsync() { WorkAsync(); // I want fire-and-forget // more unrelated async/await stuff here, e.g.: // ... await Task.Delay(2000); } 我尝试过但不喜欢的内容: static async Task StartWorkAsync() { #pragma warning disable 4014 WorkAsync(); // I want …
156 c#  async-await 

8
是否可以等待事件而不是其他异步方法?
在我的C#/ XAML Metro应用程序中,有一个按钮可以启动一个长期运行的过程。因此,按照建议,我使用async / await来确保UI线程不会被阻塞: private async void Button_Click_1(object sender, RoutedEventArgs e) { await GetResults(); } private async Task GetResults() { // Do lot of complex stuff that takes a long time // (e.g. contact some web services) ... } 有时,GetResults中发生的事情可能需要其他用户输入才能继续。为了简单起见,假设用户只需单击“继续”按钮。 我的问题是:如何以等待事件的方式暂停GetResults的执行诸如单击另一个按钮之类? 这是实现我要寻找的方法的丑陋方式:“继续”的事件处理程序”按钮设置了一个标志... private bool _continue = false; private void …

2
关于Task.Start(),Task.Run()和Task.Factory.StartNew()的用法
我只看到3个有关TPL使用的例程,它们执行相同的工作;这是代码: public static void Main() { Thread.CurrentThread.Name = "Main"; // Create a task and supply a user delegate by using a lambda expression. Task taskA = new Task( () => Console.WriteLine("Hello from taskA.")); // Start the task. taskA.Start(); // Output a message from the calling thread. Console.WriteLine("Hello from thread '{0}'.", …

6
是否存在与Process.Start异步的等效项?
如标题所示,是否有Process.Start我可以等待的等效项(允许您运行其他应用程序或批处理文件)? 我正在玩一个小型控制台应用程序,这似乎是使用异步和等待的理想场所,但我找不到这种情况的任何文档。 我在想的是以下几方面的东西: void async RunCommand() { var result = await Process.RunAsync("command to run"); }
141 c#  async-await  c#-5.0 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.