【问题标题】:How do I pass async method as Action or Func如何将异步方法作为 Action 或 Func 传递
【发布时间】:2021-06-13 23:42:45
【问题描述】:

我有一个小实用程序方法,用于在 using 语句中实例化我的 DataContext。我想将它与异步方法调用一起使用,但是,DataContext 在方法返回之前被释放。正确的使用方法是什么?

这是方法(和重载)

public void Try(Action<IDataServices> method)
{
    using (IDataServices client = GetClient())
    {
        method(client);
    }
}

public TResult Try<TResult>(Func<IDataServices, TResult> method)
{
    using (IDataServices client = GetClient())
    {
        return (TResult)method(client);
    }
}

这是我目前的使用方式(失败):

Model m = await ClientResolver.Try(async x => await x.GetModelByIDAsync(modelID));

参考:
Calling asynchronous method in using statement

【问题讨论】:

  • 你的Try 应该是Task

标签: c# async-await


【解决方案1】:

你错过了Task&lt;TResult&gt;返回类型:

public async Task<TResult> Try<TResult>(Func<IDataServices, Task<TResult>> method)
{
    using (IDataServices client = GetClient())
    {
        return (TResult)await method(client)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多