【发布时间】:2016-02-08 17:20:07
【问题描述】:
我正在尝试将我的 Operations Contracts 包装到 try-catch 块中。问题是我的 EF 上下文在同一时间范围内被破坏。我猜问题编译器不知道该怎么做。我的 catch 块也不处理任何异常。对不起我的英语,我希望我的代码能说明我的意思:
private static async Task<T> SurroundWithTryCatch<T>(Action t, T response) where T : BaseResponse
{
try
{
await Task.Run(t);
}
catch (Exception e)
{
response.Success = false;
response.Errors.Add(e.Message);
}
return response;
}
public async Task<CreateResponse> CreateAsync(CreateRequest request)
{
var response = new CreateResponse();
return await SurroundWithTryCatch(async delegate
{
var newUser = new ApplicationUser { UserName = request.UserName, Email = request.Email };
await Database.UserManager.CreateAsync(newUser, request.Password);
//Some another logic...
await Database.CommitAsync();
}, response);
}
CreateAsync方法第二行的问题。 UserManager 之前被 GC 清理过。所以我有ObjectDisposedException。 Database 是IUnitOfWork 的实现,由Autofac 注入。
【问题讨论】:
-
尝试将
SurroundWithTryCatch<T>(Action t, T response)替换为SurroundWithTryCatch<T>(Func<Task> t, T response),将return await SurroundWithTryCatch(async delegate替换为return await SurroundWithTryCatch(async () => -
@YacoubMassad 感谢您的快速回复!有用!!我在两点钟或更长时间里挣扎。您能否解释发生了什么并将其发布为答案?
标签: c# wcf asynchronous async-await