c# - 无法将类型 bool 隐式转换为 System.Threading.Tasks.Task
问题描述
我想遵循 msdn 上描述的异步等待结构here
所以我有一个async
任务:
public async void Starter()
{
CC = new CustomClass();
Task<bool> newTask = CC.MethodThatReturnsBool();
// DO SOME VISUAL THINGS
bool b = await newTask;
}
}
但是我遇到了一个编译停止错误,CC.MethodThatReturnsBool();
如我的问题标题所示。
如何以正确的格式获取我的布尔值?我尝试在错误的方法调用前随机转换(任务),但它只是从我的错误消息中删除了“隐式”!
我正在使用:
VS 社区 2017 和 .NET Framework 4.7
解决方案
根据错误,这将返回bool
:
CC.MethodThatReturnsBool()
所以你会这样存储它:
bool newBool = CC.MethodThatReturnsBool();
这似乎意味着没有等待异步操作。简化:
public void Starter()
{
CC = new CustomClass();
bool b = CC.MethodThatReturnsBool();
// do something with your bool?
}
目前尚不清楚您为什么期待await
任何事情,并且确实可能还有更多您没有显示的内容,但是如果您调用的方法是同步的,则无需等待它。
旁注:async void
是一个非常糟糕的主意。它的存在只是为了与 UI 事件处理程序等兼容。如果您正在编写任何您可以控制的内容,请不要使用async void
.
编辑:
根据您对问题的更新,听起来这里发生的事情是您有一个长时间运行的同步进程,您不想阻塞 UI 线程?您可以将一些东西包装在 a 中Task
,也许是这样的:
bool b = await Task.Run(() => new CustomClass().MethodThatReturnsBool());
所以也许总的来说你正在寻找更像这样的东西(未经测试)?:
public async Task Starter()
{
Task<bool> newTask = Task.Run(() => new CustomClass().MethodThatReturnsBool());
// DO SOME VISUAL THINGS
bool b = await newTask;
// do something with your bool?
}
要详细说明前一点,请注意整体方法现在async Task
是async void
. 这使得Starter
它自己可以等待,否则就不会是 void。
当然,理想情况下,如果它在内部执行导致其延迟的各种 I/O 绑定操作,则它本身MethodThatReturnsBool
应该是。(正如您对上述问题的评论所暗示的那样。)这可能涉及在系统的其他地方进行重构,但从长远来看,这是更可取的方法。async
推荐阅读
- bash - tild 和 eval 查找用户主页有什么区别
- python - 在 C 和 Python 代码之间交换字符串
- datetime - python将日期列表作为字符串转换为日期列表
- jestjs - VSCode 无法识别开玩笑的自定义匹配器
- office-js - 登录到 Outlook 网页版上的共享邮箱时无法使用 Office.context.mailbox.item.addFileAttachmentAsync
- ruby - 如何使用 watir 上传文件
- spring - 应用程序启动失败spring boot
- css - 全屏背景图片 CSS
- java - 如何在调用 AdapterFragment 之前正确填充数组?爪哇
- javascript - 使用反应上下文时,预期的类型来自属性“值”