我正在尝试异步删除不再需要的照片记录,但是我无法使这种方法正常工作。我不断遇到异常:
无效的操作。连接已关闭。
麻烦似乎出在foreach
循环中……如果我仅对一张照片而不是对所有照片都这样做,那么它就可以了。例如,如果我发送此方法的照片数组恰好具有1个成员,则它可以工作。如果有两个,则失败。
但是,如果我复制部分代码来对数组的第一张照片和数组的第二张照片等进行硬编码处理,它将起作用。只是当我使用一个实际的循环时,它才会爆炸。真是的。
public async void DeletePhotosAsync(PhotoEntity[] photos)
{
var deletingParentPhotos = new List<Task>();
var deletingChildPhotos = new List<Task>();
try
{
_siteAdapter.StartTransaction(System.Data.IsolationLevel.ReadCommitted,"Delete Photos");
foreach (var photo in photos)
{
deletingChildPhotos.Add(Task.Run(() => _siteAdapter.DeleteEntityCollection(photo.Photo.ChildPhotos)));
}
await Task.WhenAll(deletingChildPhotos).ConfigureAwait(false);
foreach (var photo in photos)
{
deletingParentPhotos.Add(Task.Run(() => _siteAdapter.DeleteEntity(photo.Photo)));
}
await Task.WhenAll(deletingParentPhotos).ConfigureAwait(false);
_siteAdapter.Commit();
}
catch (Exception ex)
{
_siteAdapter.Rollback();
}
}
at SD.LLBLGen.Pro.ORMSupportClasses.actionQuery.Execute()
at SD.LLBLGen.Pro.ORMSupportClasses.DataaccessAdapterCore.ExecuteactionQuery(IactionQuery queryToExecute)
at SD.LLBLGen.Pro.ORMSupportClasses.DataaccessAdapterCore.DeleteEntity(IEntity2 entityToDelete,IPredicateExpression deleteRestriction)
at SD.LLBLGen.Pro.ORMSupportClasses.DataaccessAdapterBase.<>c__DisplayClass7_0.<DeleteEntity>b__0()
at SD.LLBLGen.Pro.ORMSupportClasses.UnitOfWork2.HandleDeletes(IDataaccessAdapter adapterToUse)
at SD.LLBLGen.Pro.ORMSupportClasses.UnitOfWork2.CommitImpl(IDataaccessAdapter adapterToUse,Boolean autoCommit)
at SD.LLBLGen.Pro.ORMSupportClasses.DataaccessAdapterCore.DeleteEntityCollection(IEntityCollection2 collectionToDelete)
at SD.LLBLGen.Pro.ORMSupportClasses.DataaccessAdapterBase.<>c__DisplayClass8_0.<DeleteEntityCollection>b__0()
at Site.Models.PhotoModel.<>c__DisplayClass9_0.<DeleteInspectionPhotosAsync>b__0() in C:\Users\aletwor\source\repos\Site\Site.Models\PhotoModel.cs:line 158
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskawaitable.ConfiguredTaskawaiter.GetResult()
at Site.Models.PhotoModel.<DeleteInspectionPhotosAsync>d__9.MoveNext() in C:\Users\aletwor\source\repos\Site\Site.Models\PhotoModel.cs:line 174