Task<T>
コンパイル時に T が不明な場所と.を取得するメソッドがありIAsyncDisposable
ます。Task<T>
元のタスクが完了した後、使い捨てオブジェクトを自動的に破棄するを返す必要があります。
これは私がこれまでに思いついたものですが、コンパイル時にエラーをスローしています
private static TResult AutoDispose<TResult>(TResult result, IAsyncDisposable asyncDisposable)
{
Func<dynamic, dynamic> continuationFunction = async t => { await asyncDisposable.DisposeAsync(); return ((dynamic)t).Result; };
var autoDisposing = ((dynamic)result).ContinueWith(continuationFunction);
return (TResult)autoDisposing;
}
エラー、私が得ているのは
非同期ラムダ式をデリゲート型 'Func<dynamic, dynamic>' に変換できません。非同期ラムダ式は、void、Task、または Task を返す場合がありますが、いずれも 'Func<dynamic, dynamic>' に変換できません。
dynamic
と のさまざまな組み合わせを既に試しTask
ましたが、実用的なソリューションを作成できませんでした。コンパイル エラーまたは実行時エラーが常に発生します。
編集
なぜ私がこのようにしているのか混乱しているように見えるので:
IAsyncQueryProvider
これをsExecuteAsync
メソッド内で使用しています。インターフェイスは、メソッド署名を次のように定義します
public TResult ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken = default)
これに基づいてTResult
、タイプIAsyncEnumerable<T>
またはのいずれかであることがわかりますTask<T>
。の場合を処理するコードを既に作成しましたが、 の場合IAsyncEnumerable<T>
はまだ苦労していTask<T>
ます。