0

Azure テーブル クエリを使用して、ユーザーに割り当てられたすべてのエラー エンティティを取得しています。その後、エンティティのプロパティを変更して、エンティティが処理モードであることを示します。エンティティを処理した後、エンティティをテーブルから削除します。

並列テストを行うと、クエリ中に、エンティティが別のスレッドによって既に処理および削除されている可能性があります。そのため、エンティティを置換しようとすると、エラー 404 ResourceNotFound が発生します。

エンティティがスレッド外で変更された場合、またはエンティティがまだ存在する場合、テストする方法はありますか? エラー 404 をキャッチして無視する方が良いですか、それともエンティティを再度クエリする必要がありますか (すべてが適切ではないようです)。

TableQuery<ErrorObjectTableEntity> query = new TableQuery<ErrorObjectTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, user));
List<ErrorObjectTableEntity> queryResult = table.ExecuteQuery(query).OrderBy(x => x.action).ToList();
foreach (ErrorObjectTableEntity entity in queryResult)
{
     entity.inProcess = true;
     try
     {
         TableOperation updateOperation = TableOperation.Replace(entity);
         table.Execute(updateOperation);     
      }
      catch
      {
          //..some logging here
          //catch error 404?
      }
      //do some action
      try
      {
          TableOperation deleteOperation = TableOperation.Delete(entity);
          table.Execute(deleteOperation);
      }
      catch{...}
}
4

2 に答える 2