C# 如何在返回类型为Task的方法中尝试捕获?
我有以下方法(为了简单起见缩写): 我想合并一个C# 如何在返回类型为Task的方法中尝试捕获?,c#,task-parallel-library,C#,Task Parallel Library,我有以下方法(为了简单起见缩写): 我想合并一个try-catch块,这样我就可以记录任何潜在的Sql错误 public Task CreateAsync(TUser user) { var result = ???; // what is the return type here? try { result = FromResult(connection.Execute("CreateUser", param, commandType: Comm
try-catch块
,这样我就可以记录任何潜在的Sql错误
public Task CreateAsync(TUser user)
{
var result = ???; // what is the return type here?
try
{
result = FromResult(connection.Execute("CreateUser", param, commandType: CommandType.StoredProcedure));
}
catch(SqlException sqlEx)
{
// log error here
}
return result;
}
我想我不确定
Task
的返回类型是什么?您应该使用异步方法,而不是Task.FromResult
。
我假设您使用的是Dapper或某种扩展了SqlConnection
的框架。
我不知道存储过程返回什么。如果返回值无关紧要,那么代码应该如下所示
public async Task CreateAsync(TUser user)
{
try
{
await connection.ExecuteAsync("CreateUser", param, commandType: CommandType.StoredProcedure);
}
catch(SqlException sqlEx)
{
// log error here
}
}
如果有关系(例如bool):
公共异步任务CreateAsync(TUser用户)
{
布尔结果;
尝试
{
wait connection.ExecuteAsync(“CreateUser”,参数,commandType:commandType.StoredProcedure);
结果=真;
}
捕获(SqlException sqlEx)
{
//此处记录错误
结果=假;
}
返回结果;
}
返回类型为Task,T由connection.Execute(…)的返回类型决定。请考虑这项任务。FromResult(…)仍然是同步的。如果您希望它是异步的,您可以使用Task.Run(…)或连接对象的异步方法。我看不出返回Task
的目的是什么,您的方法实现一点也不异步,可以详细说明一下吗?对该方法的调用是:var result=await UserManager.CreateAsync(user,model.Password)
@LasseVågsætherKarlsen根据签名,OP正在实现一个自定义用户存储,实现ASP.NET Identity的IUserStore
是的,我正在使用dapper@PixelPaul然后,您可以考虑使用QueRasyNC方法来代替ExcUnTeaSyc。好处是,您可以从存储的进程中返回内容。
public async Task CreateAsync(TUser user)
{
try
{
await connection.ExecuteAsync("CreateUser", param, commandType: CommandType.StoredProcedure);
}
catch(SqlException sqlEx)
{
// log error here
}
}
public async Task<bool> CreateAsync(TUser user)
{
bool result;
try
{
await connection.ExecuteAsync("CreateUser", param, commandType: CommandType.StoredProcedure);
result = true;
}
catch(SqlException sqlEx)
{
// log error here
result = false;
}
return result;
}