我可以不等待异步任务而不使其异步无效吗?

时间:2013-07-19 06:46:27

标签: c# task-parallel-library async-await

使用异步任务方法时,需要在方法之前放置等待。我需要以非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); 
}

1 个答案:

答案 0 :(得分:8)

  

使用异步任务方法时,需要在方法之前放置等待。

处理此问题的正确方法是await方法,并调用方法async Taskasync Task<TResult>。当async通过您的代码时,这将产生级联效应。

在UI应用程序中,您通常最终会遇到一个事件处理程序,不能async Task,此时您可以创建事件处理程序async void

如果您通过制作常规方法async void来欺骗此过程,则会导致其他问题,尤其是错误处理和可组合性(即单元测试)。请参阅my MSDN articleone of the many talks,了解应避免async void的原因。

  

我需要以非UI阻止的方式执行代码,并且不想等待。

为什么你“不想”使用await?您需要以非阻塞方式运行的异步代码,而正是await所做的!