![](/img/trans.png)
[英]Why can't I return a Task<IEnumerable<out T>> without making my method async and using await
[英]Can I not await for async Task without making it async void?
使用异步任务方法时,需要在方法之前放置等待。 我需要以非UI阻塞方式执行代码,并且不想等待。 我唯一的想法是使用:
private void TaskFactory()
{
CancellationTokenSource token_TaskFactory = new CancellationTokenSource();
ParallelOptions parOpts = new ParallelOptions();
parOpts.CancellationToken = token_TaskFactory.Token;
parOpts.MaxDegreeOfParallelism = Environment.ProcessorCount;
TaskCreationOptions atp = new TaskCreationOptions();
atp = TaskCreationOptions.PreferFairness;
Task TaskFactory = Task.Factory.StartNew(() =>
{
if (!token_TaskFactory.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else
{
}
}, token_TaskFactory.Token, atp, TaskScheduler.Default);
}
使用异步任务方法时,需要在方法之前放置等待。
处理此问题的正确方法是await
该方法,并使调用方法为async Task
或async Task<TResult>
。 这将具有级联效果,因为async
在您的代码中传播。
在UI应用程序中,您通常会以事件处理程序结束,该处理程序不能是async Task
,此时您可以使事件处理程序async void
。
如果通过使常规方法async void
欺骗此过程,则会导致其他问题,尤其是错误处理和可组合性(即单元测试)。 请参阅我的MSDN文章或关于为什么应该避免async void
的许多讨论之一。
我需要以非UI阻塞方式执行代码,并且不想等待。
你为什么不“想”使用await
? 你有异步代码,你需要以非阻塞的方式运行,这正是await
所做的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.