不能将operator *应用于操作数int和Task <int>

时间:2016-06-04 15:35:07

标签: c# asynchronous task

我有一个asnyc方法来返回一个整数(因此,async Task<int>),我需要将返回值乘以另一个只返回int的方法。由于这不起作用,如何将async Task<int>转换为int?是Convert.ToInt32(AsyncMethod())吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

您的方法不会返回 int,而是Task,其结果类型为int。当您的方法返回时,此任务已经或可能仍在运行。

所以你必须等待该任务完成。你有(至少)两种选择:

  1. 如果调用方法是async方法(或可以声明为async),则可以使用await关键字:

    public async Task CallingMethod()
    {
        int result = await YourMethod();
        // do what you want the result
    }
    

    这会将CallingMethod转换为状态机。在Task运行时,控制流将返回给调用者,并在await完成后result(将结果分配给Task)后恢复执行。

  2. 您可以使用返回的Result的{​​{1}}属性:

    Task<int>

    这将阻止执行并等待public void CallingMethod() { int result = YourMethod().Result; // do what you want the result } 完成,然后将结果Task分配给int

答案 1 :(得分:0)

使用await关键字会自动将Task<T>展开到T

例如:

async void Test()
{
    Task<int> b = GetNumberAsync();
    int c = await GetNumberAsync();
}

请注意,这意味着您的方法也必须标记为async。或者,您可以将任务运行至完全完成,并通过.Result

提取值