Alb*_*nke 117 c# asynchronous async-await c#-5.0 asp.net-web-api
我正在学习Web API堆栈,我正在尝试使用Success和ErrorCodes等参数以"Result"对象的形式封装所有数据.
然而,不同的方法会产生不同的结果和错误代码,但结果对象通常会以相同的方式实例化.
为了节省一些时间并且还要了解有关C#中的异步/等待功能的更多信息,我试图将我的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个方法,对Result对象执行操作并返回它.通常通过同步方法
public T DoSomethingAsync<T>(Action<T> resultBody) where T : Result, new()
{
T result = new T();
resultBody(result);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是如何使用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?
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*ary 264
该async
当量Action<T>
是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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63721 次 |
最近记录: |