Pet*_*uda 3 c# asynchronous task-parallel-library async-await
我想简化存储库代码,并希望使用Funcs来提供常用功能.现在的问题是基于这个代码:
namespace Test
{
public class Demo
{
public Task<Person> GetAsync1(Guid id)
{
return ExecuteAsync(context => context.Persons.GetAsync(id));
}
public async Task<Person> GetAsync2(Guid id)
{
return await ExecuteAsync(async context => await context.Persons.GetAsync(id));
}
public Task<Person> GetAsync3(Guid id)
{
return ExecuteAsync(async context => await context.Persons.GetAsync(id));
}
public Task<TOut> ExecuteAsync(Func<Context, Task<TOut>> func)
{
using(var context = new Context())
{
return func(context);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题现在是如何正确调用异步函数.这三种Get方法中的哪一种是正确的?有了第一个,我认为我陷入了僵局,因为它在这一点上悬而未决.2号工作正常,但我认为这里的两个异步/等待是不正确的,因为任务重新包装!?
实际上所有3个GetAsync实施细则(个人我会使用GetAsync1),你所拥有的是一个错误ExecuteAsync
public async Task<TOut> ExecuteAsync(Func<Context, Task<TOut>> func)
{
using(var context = new Context())
{
return await func(context);
}
}
Run Code Online (Sandbox Code Playgroud)
通过等待func你的输出,在函数完成它的工作之前不要处理上下文.