Task<T>
我有一个方法可以在编译时获取一个where T is unknown 和一个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;
}
我得到的错误是
无法将异步 lambda 表达式转换为委托类型“Func<dynamic, dynamic>”。异步 lambda 表达式可能返回 void、Task 或 Task,它们都不能转换为 'Func<dynamic, dynamic>'。
我已经尝试了不同的组合,dynamic
但Task
无法创建一个有效的解决方案。我总是遇到编译或运行时错误。
编辑
因为我为什么这样做似乎令人困惑:
我在IAsyncQueryProvider
sExecuteAsync
方法中使用它。接口定义方法签名如下
public TResult ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken = default)
基于此,我知道TResult
是 typeIAsyncEnumerable<T>
或Task<T>
. 我已经编写了代码来处理这种情况,但当IAsyncEnumerable<T>
它是Task<T>
.