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

标签 c# asynchronous task-parallel-library async-await cancellation-token

我是 C# 5.0 中的 async-await 方法的新手,我脑子里的问题很少

  1. 如果 async 方法未通过输入参数或 null 检查,最好的转义方法是什么?

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

  3. CancellationTokenTask.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);
}

最佳答案

恕我直言,“在某些问题上失败”的最佳方法是抛出适当的异常,但是如果您希望避免异常,您绝对可以只使用return; .

这将创建一个同步完成的已完成/错误任务,因此使用 await 的调用者将获得已完成的任务并继续使用同一线程。


  • CancellationToken 允许调用者 取消操作,您描述的情况并非如此。

  • Task.Yield 不会终止任何操作,它只会让其他任务运行一段时间并重新安排自身以供稍后使用。

关于c# - 使用 "return"终止或退出 C# 异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055749/

相关文章:

for循环内的Javascript异步调用

c# - .net 4.5 中异步和同步的区别

c# - 如何使用 await 简单安全地调用可为空的委托(delegate)

c# - 在嵌套循环中,Parallel.For 应该用在外循环还是内循环?

c# - 查找控件文本 (ASP.NET/C#)

c# - 如何使用 MVVM Light 从一个页面传递查询字符串参数并在 WP 7 中获取另一个页面

ASP.NET MVC 什么线程池用于自定义任务?

c# - 非常简单的C#程序会生成“未处理NullReferenceException”错误

c# - MVC 5 不支持每种类型的多个对象集

c# - 正确取消异步操作并再次触发