问题标签 [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.
.net - 用异步 CTP 封装同步方法不起作用
去年,我用经典的同步和异步方法编写了一个 Web API 库。我现在正在尝试使用新的C# Async CTP 3添加 TaskAsync 方法。
我写了这个简单的代码来封装同步方法:
然后,从我的 WPF 4 应用程序中,我有一个使用它的异步方法:
问题是:我的同步方法永远不会被调用。调试器转到result = await client.AuthenticateTaskAsync(username, password);
,调试器继续其工作并且永远不会回来。同步中的断点Authenticate
永远不会中断。UpdateStatus
永远不会被调用。很奇怪(我虽然这是一个调试器实现问题)。
然后我看了一下WebClient.DownloadStringTaskAsync
是怎么实现的。我将我的 API 客户端方法更改为:
现在它可以工作了。有人可以解释为什么第一个代码不起作用吗?
c# - 可以从 TPL Task 派生以从方法返回更多详细信息吗?
我原来的方法是这样的:
方法DoSomeWork
在另一个线程上开始一些工作并返回执行 ID(只是随机字符串)。稍后我可以通过返回的执行 ID 查询结果。要点是在作业完成之前使执行 ID 可用。
现在我想将签名更改为 return Task
,因此用户可以等待。
同时,我仍然需要返回执行 ID(例如用于跟踪目的),并且我看到了一些选项。首先,使用一个out
参数,其次,返回包含执行 ID 和任务的元组(在 C# 中,这看起来不是最佳选择),第三,我真正想问的问题。
如果我创建一个派生类怎么办Task
:
这看起来好吗?还是决定其他选择更好?
PS 在 BCL 中有一些类派生自Task
.
UPDATE,似乎我无法足够清楚地定义这一点。但是我需要在作业完成之前访问 ExecutionID,所以我不能使用Task.Result
.
asynchronous - 在 C# 5 中,新的 async 指令有什么用处
可能重复:
为什么存在 async 关键字
在 C# 5 - await 和 async 组合中 - 我理解 await 指令。但是我为什么要写异步指令呢?编译器不应该能够自动检测所有异步方法吗?
c# - 如何正确重置 CancellationToken?
今天早上我一直在玩,Async CTP
并且有一个带有 abutton
和 a的简单程序label
。单击button
它开始更新label
,停止button
它停止写入label
. 但是,我不确定如何重置,CancellationTokenSource
以便我可以重新启动该过程。
我的代码:
c# - 何时使用 TaskEx.Run 与 TaskEx.RunEx
我试图了解何时使用TaskEx.Run
. 我提供了两个我在下面编写的代码示例,它们产生了相同的结果。我没有看到的是为什么我会采用Task.RunEx TaskEx.RunEx
方法,我确信这是有充分理由的,并希望有人可以填补我的空缺。
我可以达到同样的结果
c# - 如何从 C# 中的同步方法调用异步方法?
我有一个public async void Foo()
我想从同步方法调用的方法。到目前为止,我从 MSDN 文档中看到的只是通过异步方法调用异步方法,但我的整个程序并不是用异步方法构建的。
这甚至可能吗?
下面是从异步方法调用这些方法的一个示例:
演练:使用 Async 和 Await 访问 Web(C# 和 Visual Basic)
现在我正在研究从同步方法中调用这些异步方法。
c# - 如何在 C# 中“等待”“process.OutputDataReceived”事件?
目前我有这个代码:
然后这个函数的用户像这样工作:
现在的问题是我收到了这个错误:
mscorlib.dll 中出现“System.InvalidOperationException”类型的第一次机会异常 mscorlib.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:尝试将已完成的任务转换为最终状态
当我使用tcs.SetResult()
.
asp.net - 在 ASP.NET Web 应用程序中执行等待操作?
我想提出这个问题,但也许从不同的角度改写它。
出于反欺诈目的,我想在一定数量的错误登录尝试后阻止访问者。此时我有一个管理器类,它包装了登录的实际函数调用。如果访问者被阻止,则管理器会抛出异常,因此永远不会调用实际的登录方法。到现在为止还挺好。
我现在想将异常抛出部分更改为Thread.Sleep
一种东西。然而,这不是一个选项,因为这将阻止对服务器的其他请求。对于这种情况,是否有一个简单的替代方案,可能使用一些async
等待命令或使用F#
?
当前代码:
首选代码:
c# - 从 C# AsyncCTP 使用 ExecuteReaderAsync 的任何缺点
有一些文章表明异步数据库调用在 .NET 中是个坏主意。
在 C# Async CTP 上,有一个System.Data.SqlClient.SqlCommand
名为ExecuteReaderAsync
. 我对现有代码进行了如下一些操作:
我的代码中有几个这样的操作。所以,我正在考虑将它们转换为异步。
但另一方面,我并没有看到这种方法有多大吸引力(也许我没有看到正确的方向,谁知道呢!)。
那么,在这里使用这种新的异步编程模型有什么缺点吗?
编辑:
假设我重构代码如下:
据我从 await 关键字了解,它将后面的代码转换为延续。此外,当它遇到 await 关键字时,无论操作状态如何,它都会立即返回给调用者。当它完成时,它会返回并触发延续代码。
这就是我的想法。
c# - Task.Start/Wait 和 Async/Await 有什么区别?
我可能遗漏了一些东西,但是做这件事有什么区别: