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

使用异步任务方法时,需要在方法之前放置等待。 我需要以非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 。 这将具有级联效果,因为async通过您的代码。

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

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

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

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