繁体   English   中英

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

[英]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 Taskasync Task<TResult> 这将具有级联效果,因为async在您的代码中传播。

在UI应用程序中,您通常会以事件处理程序结束,该处理程序不能async Task ,此时您可以使事件处理程序async void

如果通过使常规方法async void欺骗此过程,则会导致其他问题,尤其是错误处理和可组合性(即单元测试)。 请参阅我的MSDN文章或关于为什么应该避免async void 的许多讨论之一。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM