我有一个返回 a 的函数Task<String>,要构造它,Task我必须使用匿名async函数,因为我必须await在Task. 我发现我可以返回,""但如果我尝试返回 null 会出现错误(Visual Studio 消息)
匿名函数转换为 void 返回委托不能返回值
转换为“任务”返回委托的异步 lambda 表达式无法返回值。您是否打算返回“任务”?
显示相同问题的函数
public virtual Task<String> FooBar()
{
return Task<String>.Run(async () =>
{
await Task.Delay(1500);
return ""; // OK
//return null; // Error
});
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
return await Task.FromResult<String>(null);如果我想返回空值是否更合适?
编译器不知道null字符串是否为空,因此无法自动选择正确的类型Func<Task<string>>。请执行以下操作来告诉编译器 null 是针对字符串的。
return (string)null;
Run Code Online (Sandbox Code Playgroud)
另外,正如评论中提到的,Task.Run<TResult>(Func<Task<TResult>> function)它是一个静态方法,因此当您这样做时,Task<String>.Run(...您仍然调用相同的静态方法Task.Run,没有额外的信息。相反,您需要做的是调用它并将类型传递到Run强制返回类型的部分,string而不是让编译器尝试找出返回类型应该是什么。
public virtual Task<String> FooBar()
{
return Task.Run<String>(async () =>
{
await Task.Delay(1500);
return null; // Does not error
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6797 次 |
| 最近记录: |