使用异步任务方法时,需要在方法之前放置等待。我需要以非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);
}
答案 0 :(得分:8)
使用异步任务方法时,需要在方法之前放置等待。
处理此问题的正确方法是await
方法,并调用方法async Task
或async Task<TResult>
。当async
通过您的代码时,这将产生级联效应。
在UI应用程序中,您通常最终会遇到一个事件处理程序,不能为async Task
,此时您可以创建事件处理程序async void
。
如果您通过制作常规方法async void
来欺骗此过程,则会导致其他问题,尤其是错误处理和可组合性(即单元测试)。请参阅my MSDN article或one of the many talks,了解应避免async void
的原因。
我需要以非UI阻止的方式执行代码,并且不想等待。
为什么你“不想”使用await
?您需要以非阻塞方式运行的异步代码,而正是await
所做的!