TLDR;
Why is the first call here ambiguous?
有没有办法让我在没有创建新Func的情况下向编译器解释歧义?
使用DataFlow (TPL)时,create an ActionBlock可以{/ 3}}:
var downloadString = new TransformBlock<string, string>(uri =>
{
Console.WriteLine("Downloading '{0}'...", uri);
return new WebClient().DownloadString(uri);
});
TransformBlock(以及其他)包含两个构造函数,如下所示:
public TransformBlock(Func<TInput, TOutput> transform);
public TransformBlock(Func<TInput, Task<TOutput>> transform);
因此您可以创建异步块:
var downloadString = new TransformBlock<string, string>(async uri =>
{
Console.WriteLine("Downloading '{0}'...", uri);
return await (new WebClient().DownloadStringAsync(uri));
});
当我想将lambda移动到它自己的方法时,我有问题,即
...
var downlodString = new TransformBlock<string, string>(DownloadUriAsync);
...
private async Task<string> DownloadUriAsync(string uri){
Console.WriteLine("Downloading '{0}'...", uri);
return await (new WebClient().DownloadStringAsync(uri));
}
错误CS0121:以下方法或属性之间的调用不明确:
TransformBlock<TInput, TOutput>.TransformBlock(Func<TInput, TOutput>)
和TransformBlock<TInput, TOutput>.TransformBlock(Func<TInput, Task<TOutput>>)
我无法理解为什么它不明确,因为我已将通用参数定义为<string, string>
而非<string, Task<string>>
。我可以做一个解决方法:
var downlodString = new TransformBlock<string, string>(new Func<string, Task<string>>(DownloadUriAsync));
但这对我来说有点笨拙。
重复问题:
为什么呼叫起初不明确?
有没有办法让我向编译器解释模糊性而不创建新的Func?