c# - C# 我们可以通过使用别名来使用异步吗?
问题描述
我正在做一个项目来提高我的技能。我正在尝试一起编写异步和同步代码。有一个问题我很好奇。我们将“使用”用于一次性处理。我们可以将“使用”别名与 await 关键字一起使用吗?
此代码块在未使用“使用”的情况下返回错误。这就是我使用“使用”的原因。
public static async Task<string> AddAsync(IFormFile file, string filePath)
{
var sourcePath = Path.GetTempFileName();
if (file.Length > 0)
{
using (var stream = new FileStream(sourcePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
File.Move(sourcePath, filePath);
return filePath;
}
解决方案
如果您的 C# 编译器足够新,它将为此发出正确的代码。我记得什么时候 await 是新的,但这不起作用;但如果您使用任何受支持的 .NET Core 版本,这将正常工作。
代码生成有一个令人惊讶的神器;using 不会变成真正的 finally 块;如果上面的代码对它可能无法运行的任务做了一些糟糕的事情(它变成了合成状态对象的 dispose 方法);但如果您使用任何正常模式,它都会起作用。
最明显的可怕情况是泄露任务;如果方法抛出并且任务泄露,则 Dispose 永远不会运行;但是在这种情况下,您不必在意,因为无论如何当进程将要终止时,您都不需要清理句柄。
推荐阅读
- ruby - Trailblazer:哪一步导致我的手术失败了?
- android - 公共建设 Kotlin
- xamarin - 如何在 Xamarin.android 中添加库
- node.js - 如何使请求同步等待同一 NodeJS/express webservice 的另一个请求?
- excel - 我的嵌套不工作吗?值不会被复制(VBA、循环、使用嵌套的 for 复制数据)
- excel - 如果这些列中的单元格满足条件,如何增量比较两列值并复制整行
- environment-variables - 为 aws EMR 添加步骤访问 gocd 管道中的环境变量
- ruby-on-rails - ActiveRecord、pgsql:通过多个索引查询多条记录
- c++ - 使用 .mm 文件中的 Objective-C++ 和 C++ 类将 Apple 的 ClassKit 和 swift 类合并到现有应用程序中时出错
- asp.net - ASP.NET MVC 5 加载时间非常慢