问题标签 [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.
f# - 如何在普通任务(不是任务)上执行 Async.AwaitTask)?
我正在尝试在 F# 中使用 C# 库。该库大量使用 async/await。我想async { ... }
在 F# 的工作流中使用。
我看到我们可以Async.AwaitTask
在异步 C# 方法上返回Task<T>
,但是那些返回普通的Task
呢?
也许,是否有帮助将这些转换为Async<unit>
或转换Task
为Task<unit>
以便它可以使用Async.AwaitTask
?
c# - 构造函数可以异步吗?
我有一个项目,我试图在构造函数中填充一些数据:
不幸的是,我收到一个错误:
修饰符
async
对该项目无效
当然,如果我包装一个标准方法并从构造函数中调用它:
它工作正常。同样,如果我使用旧的由内而外的方式
这也有效。我只是想知道为什么我们不能await
直接从构造函数中调用。可能有很多(甚至是明显的)边缘案例和反对它的原因,我只是想不出。我也四处寻找解释,但似乎找不到任何解释。
c# - Async-Await 表达式返回错误的结果
我对返回错误结果的 async-await 表达式有疑问。
现在,当我想通过启动 SumAll 方法对属性 A 和 B 求和时,我得到的结果是 4,我应该得到 6。下面你可以找到一个不起作用的代码。
什么时候,我用下面的方法做同样的例子,我得到了正确的结果。
顺便提一句。我知道最好的方法是使用 WhenAll 方法,但我正在学习。谢谢您的回答
c# - 反序列化和异步/等待
在我的应用程序(Windows 8 Metro)中,我将一些对象以序列化格式存储在本地文件夹中。这是读取然后返回的方法(见下文)。
如果我用 Task.Run 调用这个方法,我可以得到对象:
但是如果我使用 await 关键字,它就不起作用 - 在方法中的行 A (ReadObject) 上,线程停止并退出,没有错误或异常:
也许我没有像推荐的那样使用 await / async ?
方法
multithreading - 使用 c#5 async/await 时控制线程数
我正在研究在 c#5 中使用新的 async/await 密钥并阅读这篇文章
我看到下面的例子
据推测,如果 Urls 列表非常长,我们可能会遇到线程数失控的情况。
我想知道的是控制使用的线程数的推荐方法。有没有办法指定线程池或最大数量?
使用 TPL,您可以使用选项来控制最大线程数 ParallelOptions.MaxDegreeOfParallelism。也许某种结合 await 和 Task 的方式是可能的。
c# - .NET 的 WebBrowser 类的异步/等待实现
长期读者,这里的第一次海报。
我的目标:能够在使用 WebBrowser 类时利用 async/await。由于 WebBrowser.Navigate(string url) 是一种异步方法,因此在触发 LoadComplete 事件之前无法检查 html 文档。
到目前为止,这是我的(工作)代码:
而上一堂课现在允许我使用以下内容:
但是,我想知道是否有更有效/更正确的方法来处理这个问题。具体来说,Task.Factory.CreateNew 带有阻塞的 ManualResetEvent。感谢您的输入!
c# - 使用协程/C# 5 的 await 实现无状态 NPC 脚本
我正在尝试使用 C# 的新await
功能实现 NPC 脚本。这是我的概念证明。
在NPC.cs
你可以看到这个片段:
在一个真实的例子中,该脚本将使用 IronPython 之类的脚本语言来实现。即使它将来可能支持async
/await
关键字,但每次调用都必须这样做非常麻烦和烦人。
我尝试让另一种方法异步并执行等待,并让脚本简单地调用它,但由于方式async
/await
工作方式,脚本方法(Run
)将简单地继续而不会暂停/阻塞。
有没有办法避免必须使脚本方法异步并且必须await
在每次调用之前使用,同时仍然保留类似协程的功能?
此外,如果有比使用async
/await
同时仍然具有线程效率的更好的解决方案,请突出显示它。
谢谢!
c# - 使用异步扩展在 GUI 中实现监听器(订阅)
这是我尝试使用的具有异步响应的 3 层应用程序模型:
- 图形用户界面
- 后端
- 远程服务器
图形用户界面:
后端(使用内部变量binReader和connection)
这里 RegisterResponse 将 <Key, Action> 对添加到一些线程安全的字典中。另一个工作线程从网络流消息(消息头)中读取,并根据消息头中的字符串 cmd 调用操作。
现在的问题:
- 当我需要订阅 GUI 元素以进行定期更新(不是单个回调)时,是否可以达到相同的简洁程度?
c# - Async await 关键字是否等同于 ContinueWith lambda?
有人可以确认我是否正确理解了 Async await 关键字吗?(使用 CTP 版本 3)
到目前为止,我已经发现在方法调用之前插入 await 关键字基本上做了两件事,A. 它创建一个立即返回和 B. 它创建一个在异步方法调用完成时调用的“延续”。在任何情况下,延续都是该方法的代码块的剩余部分。
所以我想知道的是,这两段代码在技术上是否等效,如果是,这是否基本上意味着 await 关键字与创建 ContinueWith Lambda 相同(即:它基本上是一个编译器快捷方式)?如果不是,有什么区别?
VS
c# - 等待在单个线程中生成多个项目
(OBS:英语不是我的母语,我知道这个问题的标题不太好,但我尽力让问题本身清楚)
假设我有一个IEnumerable<T> ts
包含很多项目并且每个 MoveNext() 都非常昂贵 - 假设是使用一种进行昂贵计算的方法ts
生成的。yield return
看这段代码:
它异步使用集合ts
,不会阻塞主线程(在我的例子中是一个 UI 线程)。问题是:它为ts
. 有没有一种(简单的)方法可以只使用一个线程来完成整个工作?
所以,为了让自己清楚,我想只使用一个线程生成这些项目,但我需要获取某种Task
s (或任何其他带有 a 的类GetAwaiter
)的集合,以便await
在生成这些项目中的每一个之后.