我有一个返回Task<String>
的函数来构造这个Task
我必须使用匿名async
函数,因为我必须await
Task
多次调用""
1}}。我发现我可以返回public virtual Task<String> FooBar()
{
return Task<String>.Run(async () =>
{
await Task.Delay(1500);
return ""; // OK
//return null; // Error
});
}
但是如果我尝试返回null则会出现错误(Visual Studio消息)
转换为void的匿名函数返回委托不能返回值
异步lambda表达式转换为&#39;任务&#39;返回委托不能返回值。您打算返回&#39;任务&#39;
显示相同问题的功能
return await Task.FromResult<String>(null);
这里发生了什么?
如果我想返回空值,div {
background: #fe89d7;
width: 1px;
height: 15px;
display: inline-block;
}
p {
display: inline-block;
padding: 15px;
}
会更合适吗?
答案 0 :(得分:2)
编译器不知道null
是一个字符串为空,因此无法自动选择正确的类型Func<Task<string>>
。请执行以下操作,告诉编译器null为字符串。
return (string)null;
此外,正如评论中提到的那样,Task.Run<TResult>(Func<Task<TResult>> function)
是一种静态方法,所以当你执行Task<String>.Run(...
时,你仍然在调用相同的静态方法Task.Run
而没有额外的信息。你需要做的是调用它并将类型传递给Run
部分,强制返回类型为string
,而不是让编译器尝试找出返回类型应该是什么。 / p>
public virtual Task<String> FooBar()
{
return Task.Run<String>(async () =>
{
await Task.Delay(1500);
return null; // Does not error
});
}