返回Task<;TResult>;根据其签名,当您返回TResult时不会抛出编译错误
本文关键字:返回 TResult 错误 编译 gt lt Task | 更新日期: 2023-09-27 18:25:26
例如,以下代码编译并运行良好,即使函数签名明确表示它返回Task<int>
而不仅仅是int
。
public async Task<int> GetData(){
return 1;
}
这是怎么回事?看起来C#将int
封装在某种"盒子"中,但当我用自定义类型执行类似操作时,它会引发编译错误。
观察:
public async CustomType<int> GetData(){
return 1;
}
以下代码也是编译时错误"无法将类型'int'隐式转换为'System.Threading.Tasks.Task'"
public Task<int> GetData(){
return 1;
}
您需要使用async
来返回int
,如下所示。然而,如果没有任何等待,它将向您发出警告-"此异步方法缺少'await'运算符,将同步运行。请考虑使用'await]运算符等待非阻塞API调用,或使用'await Task.run(…)'在后台线程上执行CPUBound工作"
public async Task<int> GetData() {
return 1;
}
要返回没有async
的任务,您需要使用TaskCompletionSource,如下所示:
public Task<int> GetData() {
var result = new TaskCompletionSource<int>();
result.SetResult(1);
return result.Task;
}