问题标签 [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 投票
1 回答
644 浏览

.net - 用异步 CTP 封装同步方法不起作用

去年,我用经典的同步和异步方法编写了一个 Web API 库。我现在正在尝试使用新的C# Async CTP 3添加 TaskAsync 方法。

我写了这个简单的代码来封装同步方法:

然后,从我的 WPF 4 应用程序中,我有一个使用它的异步方法:

问题是:我的同步方法永远不会被调用。调试器转到result = await client.AuthenticateTaskAsync(username, password);,调试器继续其工作并且永远不会回来。同步中的断点Authenticate永远不会中断。UpdateStatus永远不会被调用。很奇怪(我虽然这是一个调试器实现问题)。

然后我看了一下WebClient.DownloadStringTaskAsync是怎么实现的。我将我的 API 客户端方法更改为:

现在它可以工作了。有人可以解释为什么第一个代码不起作用吗?

0 投票
3 回答
6207 浏览

c# - 可以从 TPL Task 派生以从方法返回更多详细信息吗?

我原来的方法是这样的:

方法DoSomeWork在另一个线程上开始一些工作并返回执行 ID(只是随机字符串)。稍后我可以通过返回的执行 ID 查询结果。要点是在作业完成之前使执行 ID 可用。

现在我想将签名更改为 return Task,因此用户可以等待。

同时,我仍然需要返回执行 ID(例如用于跟踪目的),并且我看到了一些选项。首先,使用一个out参数,其次,返回包含执行 ID 和任务的元组(在 C# 中,这看起来不是最佳选择),第三,我真正想问的问题。

如果我创建一个派生类怎么办Task

这看起来好吗?还是决定其他选择更好?

PS 在 BCL 中有一些类派生自Task.

UPDATE,似乎我无法足够清楚地定义这一点。但是我需要在作业完成之前访问 ExecutionID,所以我不能使用Task.Result.

0 投票
1 回答
272 浏览

asynchronous - 在 C# 5 中,新的 async 指令有什么用处

可能重复:
为什么存在 async 关键字

在 C# 5 - await 和 async 组合中 - 我理解 await 指令。但是我为什么要写异步指令呢?编译器不应该能够自动检测所有异步方法吗?

0 投票
3 回答
36313 浏览

c# - 如何正确重置 CancellationToken?

今天早上我一直在玩,Async CTP并且有一个带有 abutton和 a的简单程序label。单击button它开始更新label,停止button它停止写入label. 但是,我不确定如何重置,CancellationTokenSource以便我可以重新启动该过程。

我的代码:

0 投票
3 回答
13282 浏览

c# - 何时使用 TaskEx.Run 与 TaskEx.RunEx

我试图了解何时使用TaskEx.Run. 我提供了两个我在下面编写的代码示例,它们产生了相同的结果。我没有看到的是为什么我会采用Task.RunEx TaskEx.RunEx方法,我确信这是有充分理由的,并希望有人可以填补我的空缺。

我可以达到同样的结果

0 投票
15 回答
964328 浏览

c# - 如何从 C# 中的同步方法调用异步方法?

我有一个public async void Foo()我想从同步方法调用的方法。到目前为止,我从 MSDN 文档中看到的只是通过异步方法调用异步方法,但我的整个程序并不是用异步方法构建的。

这甚至可能吗?

下面是从异步方法调用这些方法的一个示例:
演练:使用 Async 和 Await 访问 Web(C# 和 Visual Basic)

现在我正在研究从同步方法中调用这些异步方法。

0 投票
2 回答
4130 浏览

c# - 如何在 C# 中“等待”“process.OutputDataReceived”事件?

目前我有这个代码:

然后这个函数的用户像这样工作:

现在的问题是我收到了这个错误:

mscorlib.dll 中出现“System.InvalidOperationException”类型的第一次机会异常 mscorlib.dll 中出现“System.InvalidOperationException”类型的未处理异常

附加信息:尝试将已完成的任务转换为最终状态

当我使用tcs.SetResult().

0 投票
2 回答
329 浏览

asp.net - 在 ASP.NET Web 应用程序中执行等待操作?

我想提出这个问题,但也许从不同的角度改写它。

出于反欺诈目的,我想在一定数量的错误登录尝试后阻止访问者。此时我有一个管理器类,它包装了登录的实际函数调用。如果访问者被阻止,则管理器会抛出异常,因此永远不会调用实际的登录方法。到现在为止还挺好。

我现在想将异常抛出部分更改为Thread.Sleep一种东西。然而,这不是一个选项,因为这将阻止对服务器的其他请求。对于这种情况,是否有一个简单的替代方案,可能使用一些async等待命令或使用F#

当前代码:

首选代码:

0 投票
2 回答
39630 浏览

c# - 从 C# AsyncCTP 使用 ExecuteReaderAsync 的任何缺点

有一些文章表明异步数据库调用在 .NET 中是个坏主意。

在 C# Async CTP 上,有一个System.Data.SqlClient.SqlCommand名为ExecuteReaderAsync. 我对现有代码进行了如下一些操作:

我的代码中有几个这样的操作。所以,我正在考虑将它们转换为异步。

但另一方面,我并没有看到这种方法有多大吸引力(也许我没有看到正确的方向,谁知道呢!)。

那么,在这里使用这种新的异步编程模型有什么缺点吗?

编辑:

假设我重构代码如下:

据我从 await 关键字了解,它将后面的代码转换为延续。此外,当它遇到 await 关键字时,无论操作状态如何,它都会立即返回给调用者。当它完成时,它会返回并触发延续代码。

这就是我的想法。

0 投票
6 回答
95342 浏览

c# - Task.Start/Wait 和 Async/Await 有什么区别?

我可能遗漏了一些东西,但是做这件事有什么区别: