我是 C# 5.0
中的 async-await
方法的新手,我脑子里的问题很少
如果
async
方法未通过输入参数或 null 检查,最好的转义方法是什么?在 Task
async
方法中使用return;
的逻辑流程是什么(在某些情况下,它变成了无限循环)?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);
}
最佳答案
恕我直言,“在某些问题上失败”的最佳方法是抛出适当的异常,但是如果您希望避免异常,您绝对可以只使用return;
.
这将创建一个同步完成的已完成/错误任务,因此使用 await
的调用者将获得已完成的任务并继续使用同一线程。
CancellationToken
允许调用者 取消操作,您描述的情况并非如此。Task.Yield
不会终止任何操作,它只会让其他任务运行一段时间并重新安排自身以供稍后使用。
关于c# - 使用 "return"终止或退出 C# 异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055749/