107得票3回答
当前的同步上下文不能用作任务调度器。

我正在使用 Tasks 在我的 ViewModel 中运行长时间的服务器调用,使用TaskScheduler.FromSyncronizationContext()将结果传回到Dispatcher。例如:var context = TaskScheduler.FromCurrentSynchr...

106得票5回答
无法隐式将类型“string”转换为“System.Threading.Tasks.Task<string>”

我对异步编程还不熟悉,所以在浏览了一些异步示例代码后,我想写一个简单的异步代码。 我创建了一个简单的Winform应用程序,并在窗体内写下了以下代码。但它就是不起作用。private Task&lt;string&gt; methodAsync() { Thread.Sleep(10...

102得票7回答
有没有基于任务的替代方案可以替换System.Threading.Timer?

我对 .Net 4.0 的任务(Task)还不熟悉,我没有找到我认为应该有的基于任务的定时器替代品或实现,例如周期性任务。是否有这样的功能? 更新 我想出了一个解决我的需求的方案,就是将“定时器”功能包装在一个任务中,并使用子任务利用 CancellationToken 并返回任务以参与后续...

102得票3回答
正确的实现无限任务的方法(定时器 vs 任务)

因此,我的应用程序需要几乎持续地执行一个操作(每次运行之间暂停约10秒),只要应用程序正在运行或请求取消。它需要执行的工作可能需要最多30秒钟。 使用System.Timers.Timer并使用AutoReset是否更好,以确保在前一个“tick”完成之前不执行操作? 还是应该使用带有取消...

101得票5回答
使用async/await会创建一个新线程吗?

我对 TPL 不熟悉,想知道:C# 5.0 中新增的异步编程支持(通过新的 async 和 await 关键字)与线程的创建有何关系? 具体来说,使用 async/await 是否会每次创建一个新线程?如果有很多嵌套使用了 async/await 的方法,是否为每个方法都创建一个新线程?

100得票4回答
从非异步代码调用异步方法

我正在更新一个库,它的API表面是在.NET 3.5中构建的。因此,所有方法都是同步的。我不能更改API(即将返回值转换为Task),因为那将需要所有调用者进行更改。所以我只能想办法以最佳方式以同步方式调用异步方法。这是在ASP.NET 4、ASP.NET Core和.NET/.NET Cor...

100得票5回答
如何取消CancellationToken

我开始一个任务,然后启动其他任务,以此类推。鉴于这棵树,如果任何一个任务失败,整个操作的结果都是无用的。我正在考虑使用取消令牌。令我惊讶的是,该令牌没有“CancelThisToken()”方法... 在仅拥有CancellationToken的情况下,如何取消它?

94得票2回答
将基于回调的异步方法转换为可等待任务的最佳方式

如何将使用回调函数的“传统”异步方法转换/包装为返回(可等待的)任务的最佳方法? 例如,给定以下方法: public void GetStringFromUrl(string url, Action&lt;string&gt; onCompleted); 我所知道的将此内容封装成返回任...

93得票3回答
使用.NET 4.0任务模式,通过HTTPClient .ReadAsAsync将JSON反序列化为数组或列表

我正在尝试使用.NET 4.0任务模式反序列化从http://api.usa.gov/jobs/search.json?query=nursing+jobs返回的JSON数据。 它返回以下JSON数据(在http://jsonviewer.stack.hu/上加载JSON数据)。[ { ...

93得票2回答
如何在Task中捕获异常的最佳方法?

使用 System.Threading.Tasks.Task&lt;TResult&gt;,我必须处理可能抛出的异常。我正在寻找最好的方法来做到这一点。到目前为止,我已经创建了一个基类来管理调用 .ContinueWith(...) 内部的所有未捕获的异常。 我想知道是否有更好的方式来做到这...