已加async修饰符仍无法调用await Task.Delay()?VS无法识别该函数
解决async事件处理函数中无法使用await Task.Delay()的问题
你已经给按钮点击事件方法加上了async修饰符,但Visual Studio还是识别不了await Task.Delay()?我来帮你梳理几个最常见的解决思路:
检查是否引用了
System.Threading.Tasks命名空间Task.Delay()这个方法是在System.Threading.Tasks命名空间下定义的,如果你的代码文件顶部没有添加这个引用,VS肯定找不到它。赶紧在文件开头加上这行:using System.Threading.Tasks;确认项目的目标框架版本
async/await语法和Task.Delay()是从.NET Framework 4.5开始原生支持的。如果你的项目还在使用.NET Framework 4.0或者更早的版本,得做以下调整:- 右键项目 → 选择「属性」→ 切换到「应用程序」标签页 → 把「目标框架」升级到.NET Framework 4.5及以上;
- 如果没法升级框架版本,你可以通过NuGet安装
Microsoft.Bcl.Async包,这个包能让.NET 4.0也支持async/await和相关的Task类方法。
排查命名冲突问题
要是你的代码里有自定义的Task类,或者其他同名的类型,会导致VS混淆,找不到系统自带的Task.Delay()。这种情况下,你可以尝试用完整的命名空间来调用方法:await System.Threading.Tasks.Task.Delay(2000); // 这里的2000是你需要的延迟毫秒数
另外多说一句:虽然在事件处理程序中使用async void是允许的,但它存在一些风险(比如未捕获的异常可能会导致应用崩溃),如果后续有机会,你可以考虑用async Task配合事件包装器的写法,但当前场景下用async void是完全合法的。
先试试上面的方法,应该能解决VS识别不了Task.Delay()的问题。
内容的提问来源于stack exchange,提问作者Jaddy Boy
相关产品推荐
相关产品推荐

