如何将异步方法的结果包装到我自己的包装器类(MyEnvelop)中并将其作为任务返回?
我使用自定义Envelope类将数据访问组件的结果返回到业务层。 这适用于同步方法,但如何在异步模式下返回MyEnvelope类型的结果?
更新代码示例:
public async Task<MyEnvelope<Customer>> FindAsync(params object[] keyValues)
{
using (var nw = new NWRepository())
{
Customer result = await nw.DoSomethingAsync<Customer>(keyValues);
return // here I would like to return new MyEnvelope<Customer>(result)
// wrapped in Task as shown in the signature
}
}
答案 0 :(得分:3)
你想要做的是:
public async Task<MyEnvelope<Customer>> FindAsync(params object[] keyValues)
{
using (var nw = new NWRepository())
{
Customer c = await nw.FindAsync<Customer>(keyValues);
return new MyEnvelope<Customer>(c);
}
}
然后你可以这样调用这个方法:
MyEnvelope<Customer> customer = await FindAsync(p1, p2, p3);
请记住await
将返回Result
的{{1}} Task<T>
类型T
而不是Task
对象本身。
答案 1 :(得分:0)
无法完成,因为您需要先解决任务才能将其传递给MyEnvelope
。您可以获得的最接近的内容是删除解包该任务的async/await
个关键字并获取Task<Customer>
。
public Task<Customer> FindAsync(params object[] keyValues)
{
using (var nw = new NWRepository())
{
return nw.DoSomethingAsync<Customer>(keyValues)
}
}