如何实现异步操作委托方法?

2024-01-09

一些背景信息。

我正在学习 Web API 堆栈,并且尝试以“的形式封装所有数据”Result“带有参数的对象,例如Success and ErrorCodes.

然而,不同的方法会产生不同的结果和错误代码,但结果对象通常会以相同的方式实例化。

为了节省一些时间,也为了了解更多async/awaitC# 中的功能,我试图将 Web API 操作的所有方法体包装在异步操作委托中,但遇到了一些困难...

给定以下课程:

public class Result
{
    public bool Success { get; set; }
    public List<int> ErrorCodes{ get; set; }
}

public async Task<Result> GetResultAsync()
{
    return await DoSomethingAsync<Result>(result =>
    {
        // Do something here
        result.Success = true;
        
        if (SomethingIsTrue)
        {
            result.ErrorCodes.Add(404);
            result.Success = false;
        }
    }
}

我想编写一个方法来执行操作Result对象并返回它。通常通过同步方法,它会是

public T DoSomethingAsync<T>(Action<T> resultBody) where T : Result, new()
{
    T result = new T();
    resultBody(result);
    return result;
}

但是我如何将此方法转换为异步方法async/await?

这是我尝试过的:

public async Task<T> DoSomethingAsync<T>(Action<T, Task> resultBody) 
    where T: Result, new()
{
    // But I don't know what do do from here.
    // What do I await?
}

The async相当于Action<T> is Func<T, Task>,所以我相信这就是您正在寻找的:

public async Task<T> DoSomethingAsync<T>(Func<T, Task> resultBody)
    where T : Result, new()
{
  T result = new T();
  await resultBody(result);
  return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现异步操作委托方法? 的相关文章

随机推荐