我有一个asnyc方法来返回一个整数(因此,async Task<int>
),我需要将返回值乘以另一个只返回int
的方法。由于这不起作用,如何将async Task<int>
转换为int
?是Convert.ToInt32(AsyncMethod())
吗?
提前致谢
答案 0 :(得分:1)
您的方法不会返回 int
,而是Task
,其结果类型为int
。当您的方法返回时,此任务已经或可能仍在运行。
所以你必须等待该任务完成。你有(至少)两种选择:
如果调用方法是async
方法(或可以声明为async
),则可以使用await
关键字:
public async Task CallingMethod()
{
int result = await YourMethod();
// do what you want the result
}
这会将CallingMethod
转换为状态机。在Task
运行时,控制流将返回给调用者,并在await
完成后result
(将结果分配给Task
)后恢复执行。
您可以使用返回的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