你如何实现一个asynchronous操作委托方法?
一点背景资料。
我正在学习Web API堆栈,我试图用“Result”和“ErrorCodes”等参数封装所有数据。
但是,不同的方法会产生不同的结果和错误代码,但结果对象通常会以相同的方式实例化。
为了节省一些时间,也想了解更多关于asynchronous/等待C#中的function,我试图将我的web api动作的所有方法主体包装在一个asynchronous操作委托,但陷入了一个障碍…
鉴于以下类别:
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; }
但是,如何将这个方法转换成asynchronous方法,使用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? }
Action<T>
的async
等价物是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; }
所以我相信实现这个的方法是:
public Task<T> DoSomethingAsync<T>(Action<T> resultBody) where T : Result, new() { return Task<T>.Factory.StartNew(() => { T result = new T(); resultBody(result); return result; }); }
- 使用HttpClient进行Https调用
- 压缩HTTP GET响应
- 一起使用承载令牌和cookieauthentication
- 如何在Web API消息处理程序中提取自定义标题值?
- 如何在WebAPI 2中进行CORS身份validation?
- 自定义JsonConverter(Web API)中的Json.Net JsonSerializer中的自引用循环
- 什么是网站API的黄金标准? Twitter,Flickr,Facebook等
- 从Asp.net WEBAPI显式返回一个JSONstring?
- Web API 2和.NET 4.5.1迁移后GlobalConfiguration.Configure()不存在