我有一个返回Task<String>
的函数,要构造此Task
,我必须使用匿名async
函数,因为我必须在await
中进行多次调用Task
。我发现可以返回""
,但是如果尝试返回null则会出现错误(Visual Studio消息)
显示相同问题的函数
public virtual Task<String> FooBar()
{
return Task<String>.Run(async () =>
{
await Task.Delay(1500);
return ""; // OK
//return null; // Error
});
}
这是怎么回事? 如果我想返回空值,是否更适合
return await Task.FromResult<String>(null);
? 最佳答案
编译器不知道null
是字符串的null,因此无法自动选择正确的类型Func<Task<string>>
。而是执行以下操作,以告知编译器null为字符串。
return (string)null;
另外,正如注释中提到的那样,
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
});
}
关于c# - 返回运行异步匿名函数的Task中的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38835772/