C# 过程中的任务行为
我的代码实际上没有问题,但我可能会遇到性能问题 根据我对任务的了解,首先启动的任务(比如TaskA)可以与另一个任务(比如TaskB)并行运行,但TaskB可能会在TaskA完成其工作之前完成并退出其线程。所以在我的代码中,我试图继续一个操作,但首先要知道任务的状态。我的代码中名为C# 过程中的任务行为,c#,asp.net-core,task,C#,Asp.net Core,Task,我的代码实际上没有问题,但我可能会遇到性能问题 根据我对任务的了解,首先启动的任务(比如TaskA)可以与另一个任务(比如TaskB)并行运行,但TaskB可能会在TaskA完成其工作之前完成并退出其线程。所以在我的代码中,我试图继续一个操作,但首先要知道任务的状态。我的代码中名为TaskResult的任务将在前面的代码行运行之前完成,这是真的吗?还是我应该对其使用task.Wait(),如果这是我想要的 public virtual async Task<OperationResult
TaskResult
的任务将在前面的代码行运行之前完成,这是真的吗?还是我应该对其使用task.Wait()
,如果这是我想要的
public virtual async Task<OperationResult> DeleteAsync(Expression<Func<TEntity, bool>> expression)
{
Task TaskResult = await _DbContext.Set<TEntity>().RemoveRange(IEnumerable<TEntity>);
if (TaskResult.Status == TaskStatus.RanToCompletion)
{
return new OperationResult()
{
Message = "",
ReturnObject = null,
Status = OperationStatus.Deleted,
Succeeded = true
};
}
if (TaskResult.Status == TaskStatus.Faulted)
{
return new OperationResult()
{
Message = "",
ReturnObject = null,
Status = OperationStatus.UnknownError,
Succeeded = false
};
}
}
公共虚拟异步任务DeleteAsync(表达式)
{
Task TaskResult=wait _DbContext.Set().RemoveRange(IEnumerable);
if(TaskResult.Status==TaskStatus.RanToCompletion)
{
返回新的操作结果()
{
Message=“”,
ReturnObject=null,
状态=操作状态。已删除,
成功=真
};
}
if(TaskResult.Status==TaskStatus.Faulted)
{
返回新的操作结果()
{
Message=“”,
ReturnObject=null,
状态=操作状态。未知错误,
成功=错误
};
}
}
wait关键字将停止方法的执行,直到
任务完成。完成后,await
将返回任务的结果,或者抛出任务中发生的异常(如果有)。因此,如果您已经在等待一个任务
出现故障,那么测试该任务是否出现故障是没有意义的,因为如果它出现故障,await
将引发异常
只需将其包装在try
/catch
块中即可
但您的代码甚至无法编译,因为:
不返回任务
,因为它实际上根本不与数据库通信。它只是删除内存中的记录。您需要请求提交您的更改
实际上,您没有将对象列表传递给RemoveRange
。(您是否更改了此示例的代码?)
等待任务
后,等待
关键字返回该任务
的结果,而不是任务
本身
下面是一个例子,说明如何编写:
公共虚拟异步任务DeleteAsync(表达式){
_DbContext.Set().RemoveRange(somethinghere);
试一试{
//提交更改
var result=await_DbContext.SaveChangesAsync();
//结果将是一个整数(更改的记录数),而不是一个任务
//如果我们走到这一步,我们就成功了
返回新的操作结果()
{
Message=“”,
ReturnObject=null,
状态=操作状态。已删除,
成功=真
};
}捕获(例外e){
返回新的操作结果()
{
Message=“”,//如果需要,可以在此处使用e.Message
ReturnObject=null,
状态=操作状态。未知错误,
成功=错误
};
}
}
请注意,您可以将:
await _DbContext.SaveChangesAsync();
如果您不打算使用结果
非常感谢您的澄清。将对象传递到RemoveRange()
是一个印刷错误。