我想遵循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();
周围出现编译停止错误。
如何以正确的格式获取bool?我尝试在错误的方法调用之前随机投射(任务),但它只是从错误消息中删除了“隐式”!
我正在使用:
VS Community 2017和.NET Framework 4.7
答案 0 :(得分:1)
根据错误,这将返回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线程?您可以将某些东西包装在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
本身可以等待,否则将无法获得。
理想情况下,当然,如果MethodThatReturnsBool
在内部执行各种I / O绑定操作(导致其延迟),则其 应该为async
。 (如您对上述问题的评论所暗示。)这可能涉及重构系统中的其他位置,但从长远来看,是首选的方法。