我可以不等待异步任务而不使其异步无效吗?
使用异步任务方法时,需要在方法之前放置等待。 我需要以非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
。 这将具有级联效果,因为async
通过您的代码。
在UI应用程序中,您通常最终会遇到一个事件处理程序,它不能是async Task
,此时您可以使事件处理程序async void
。
如果通过使常规方法async void
欺骗此过程,则会导致其他问题,尤其是error handling和可组合性(即unit testing)。 请参阅我的MSDN文章或关于为什么应该避免async void
的许多讨论之一。
我需要以非UI阻塞方式执行代码,并且不想等待。
你为什么不“想”使用await
? 您需要以非阻塞方式运行的异步代码,而这正是await
所做的!