使用"return"终止或退出C#异步方法

ale*_*tcl 11 c# asynchronous task-parallel-library async-await cancellation-token

我是这个async-await方法的新手C# 5.0,我脑子里几乎没有问题

  1. async如果输入参数或null检查失败,那么转义方法的最佳方法是什么?

  2. return;在Task async方法中使用的逻辑流程是什么(在某些情况下,它变成了无限循环)?

  3. 在这种情况下是更合适CancellationToken还是Task.Yield更合适?

public Func<AzureBlobInfo, string, Task> UploadSuccessCallBackAsync { get; set; }

private async Task OnUploadSuccessAsync(AzureBlobInfo info)
{
    if (this.UploadSuccessCallBackAsync == null)
    {
        return;
    }

    var transactionType = this.FormData.Get("transactionType");
    if (string.IsNullOrEmpty(transactionType))
    {
        transactionType = "unknown";
    }

    await this.UploadSuccessCallBackAsync(info, transactionType);
}
Run Code Online (Sandbox Code Playgroud)

i3a*_*non 12

"遇到一些问题失败"的最佳方法是恕我直言,但是return;如果你愿意避免例外,你肯定可以使用.

这将创建一个同步完成的已完成/故障任务,因此调用者await将使用完成的任务并继续使用相同的线程.


  • CancellationToken允许调用者取消操作,这与您描述的情况不同.

  • Task.Yield 它不会终止任何操作,只是让其他任务运行一段时间并重新安排自己以后再运行.