无法将布尔类型隐式转换为System.Threading.Tasks.Task <bool>

时间:2019-01-28 15:50:04

标签: c# asynchronous

我想遵循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

1 个答案:

答案 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。 (如您对上述问题的评论所暗示。)这可能涉及重构系统中的其他位置,但从长远来看,是首选的方法。