次のコードでエラーが発生します。非同期ラムダ式をデリゲート型 'Func <bool、string、bool>'に変換できません。
public async Task<bool> FlushUrlAsync(Uri url, bool recursive, CancellationToken token = default(CancellationToken))
{
_serverPortsConfig.CacheServerPorts
.Select(cacheServerPort => $"http://{url.Host}:{cacheServerPort}{url.AbsolutePath}")
.Aggregate(true, (current, memoryCacheUrl) => current && await FlushUrlAsync(recursive, memoryCacheUrl)); //<--- produces the next error:
// Cannot convert async lambda expression to delegate type
// 'Func<bool, string, bool>'. An async lambda expression may return
// void, Task or Task<T>, none of which are convertible to
// 'Func<bool, string, bool>'.
}
この方法は
private async Task<bool> FlushUrlAsync(bool recursive, string memoryCacheUrl)
{
return await someMagic(); //for clearity I removed the code.
}
次の関数を呼び出し、それは次のようにたくさん見える:Convert async lambda expression to delegate type System.Func<T>?、howevery、そこに解決策は、/それは私のために動作させることはできませんではないでしょう。
私が持っていた:
var result = true;
foreach (var cacheServerPort in _serverPortsConfig.CacheServerPorts)
{
var memoryCacheUrl = $"http://{url.Host}:{cacheServerPort}{url.AbsolutePath}";
result = result && await FlushUrlAsync(memoryCacheUrl, recursive);
}
return result;
はその後ReSharperの私に提供されたコードを与えたが、ちょうど非同期キーワードは動作しません加えます。
.Aggregate(true, async (current, memoryCacheUrl) => current && await FlushUrlAsync(recursive, memoryCacheUrl));
私はerorrを与えます:非同期メソッドの戻り値の型はvoid、taskまたはTaskでなければなりません。
任意のアイデア?
完璧!しかし、私は同意する必要があります.... foreachを使用すると、より読みやすくなります。 –