问题标签 [async-await]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
11951 浏览

f# - 如何在普通任务(不是任务)上执行 Async.AwaitTask)?

我正在尝试在 F# 中使用 C# 库。该库大量使用 async/await。我想async { ... }在 F# 的工作流中使用。

我看到我们可以Async.AwaitTask在异步 C# 方法上返回Task<T>,但是那些返回普通的Task呢?

也许,是否有帮助将这些转换为Async<unit>或转换TaskTask<unit>以便它可以使用Async.AwaitTask

0 投票
12 回答
241701 浏览

c# - 构造函数可以异步吗?

我有一个项目,我试图在构造函数中填充一些数据:

不幸的是,我收到一个错误:

修饰符async对该项目无效

当然,如果我包装一个标准方法并从构造函数中调用它:

它工作正常。同样,如果我使用旧的由内而外的方式

这也有效。我只是想知道为什么我们不能await直接从构造函数中调用。可能有很多(甚至是明显的)边缘案例和反对它的原因,我只是想不出。我也四处寻找解释,但似乎找不到任何解释。

0 投票
1 回答
315 浏览

c# - Async-Await 表达式返回错误的结果

我对返回错误结果的 async-await 表达式有疑问。

现在,当我想通过启动 SumAll 方法对属性 A 和 B 求和时,我得到的结果是 4,我应该得到 6。下面你可以找到一个不起作用的代码。

什么时候,我用下面的方法做同样的例子,我得到了正确的结果。

顺便提一句。我知道最好的方法是使用 WhenAll 方法,但我正在学习。谢谢您的回答

0 投票
2 回答
2933 浏览

c# - 反序列化和异步/等待

在我的应用程序(Windows 8 Metro)中,我将一些对象以序列化格式存储在本地文件夹中。这是读取然后返回的方法(见下文)。

如果我用 Task.Run 调用这个方法,我可以得到对象:

但是如果我使用 await 关键字,它就不起作用 - 在方法中的行 A (ReadObject) 上,线程停止并退出,没有错误或异常:

也许我没有像推荐的那样使用 await / async ?

方法

0 投票
2 回答
927 浏览

multithreading - 使用 c#5 async/await 时控制线程数

我正在研究在 c#5 中使用新的 async/await 密钥并阅读这篇文章

我看到下面的例子

据推测,如果 Urls 列表非常长,我们可能会遇到线程数失控的情况。

我想知道的是控制使用的线程数的推荐方法。有没有办法指定线程池或最大数量?

使用 TPL,您可以使用选项来控制最大线程数 ParallelOptions.MaxDegreeOfParallelism。也许某种结合 await 和 Task 的方式是可能的。

0 投票
4 回答
12811 浏览

c# - .NET 的 WebBrowser 类的异步/等待实现

长期读者,这里的第一次海报。

我的目标:能够在使用 WebBrowser 类时利用 async/await。由于 WebBrowser.Navigate(string url) 是一种异步方法,因此在触发 LoadComplete 事件之前无法检查 html 文档。

到目前为止,这是我的(工作)代码:

而上一堂课现在允许我使用以下内容:

但是,我想知道是否有更有效/更正确的方法来处理这个问题。具体来说,Task.Factory.CreateNew 带有阻塞的 ManualResetEvent。感谢您的输入!

0 投票
2 回答
586 浏览

c# - 使用协程/C# 5 的 await 实现无状态 NPC 脚本

我正在尝试使用 C# 的新await功能实现 NPC 脚本。这是我的概念证明。

NPC.cs你可以看到这个片段:

在一个真实的例子中,该脚本将使用 IronPython 之类的脚本语言来实现。即使它将来可能支持async/await关键字,但每次调用都必须这样做非常麻烦和烦人。

我尝试让另一种方法异步并执行等待,并让脚本简单地调用它,但由于方式async/await工作方式,脚本方法(Run)将简单地继续而不会暂停/阻塞。

有没有办法避免必须使脚本方法异步并且必须await在每次调用之前使用,同时仍然保留类似协程的功能?

此外,如果有比使用async/await同时仍然具有线程效率的更好的解决方案,请突出显示它。

谢谢!

0 投票
1 回答
206 浏览

c# - 使用异步扩展在 GUI 中实现监听器(订阅)

这是我尝试使用的具有异步响应的 3 层应用程序模型:

  • 图形用户界面
  • 后端
  • 远程服务器

图形用户界面:

后端(使用内部变量binReaderconnection

这里 RegisterResponse 将 <Key, Action> 对添加到一些线程安全的字典中。另一个工作线程从网络流消息(消息头)中读取,并根据消息头中的字符串 cmd 调用操作。

现在的问题:

  • 当我需要订阅 GUI 元素以进行定期更新(不是单个回调)时,是否可以达到相同的简洁程度?
0 投票
2 回答
20974 浏览

c# - Async await 关键字是否等同于 ContinueWith lambda?

有人可以确认我是否正确理解了 Async await 关键字吗?(使用 CTP 版本 3)

到目前为止,我已经发现在方法调用之前插入 await 关键字基本上做了两件事,A. 它创建一个立即返回和 B. 它创建一个在异步方法调用完成时调用的“延续”。在任何情况下,延续都是该方法的代码块的剩余部分。

所以我想知道的是,这两段代码在技术上是否等效,如果是,这是否基本上意味着 await 关键字与创建 ContinueWith Lambda 相同(即:它基本上是一个编译器快捷方式)?如果不是,有什么区别?

VS

0 投票
2 回答
257 浏览

c# - 等待在单个线程中生成多个项目

(OBS:英语不是我的母语,我知道这个问题的标题不太好,但我尽力让问题本身清楚)

假设我有一个IEnumerable<T> ts包含很多项目并且每个 MoveNext() 都非常昂贵 - 假设是使用一种进行昂贵计算的方法ts生成的。yield return

看这段代码:

它异步使用集合ts,不会阻塞主线程(在我的例子中是一个 UI 线程)。问题是:它为ts. 有没有一种(简单的)方法可以只使用一个线程来完成整个工作?

所以,为了让自己清楚,我想只使用一个线程生成这些项目,但我需要获取某种Tasks (或任何其他带有 a 的类GetAwaiter)的集合,以便await在生成这些项目中的每一个之后.