サービスファブリックには、RunAsyncメソッドと2つのサービスコールの両方でステートフルなサービスが用意されています。サービスファブリックのReliableQueueのデッドロックやタイムアウトを防止できますか?
一つのサービスコール物事をデキューしようとする一方でReliableQueue
using(ITransaction tx = StateManager.CreateTransaction())
{
await queue.EnqueueAsync(tx, message);
queueLength = await queue.GetCountAsync(tx);
await tx.CommitAsync();
}
で何かRunAsyncをキューに入れることができます:
using(ITransaction tx = StateManager.CreateTransaction())
{
await queue.TryDequeueAsync(tx);
queueLength = await queue.GetCountAsync(tx);
await tx.CommitAsync();
}
GetCountAsyncは、デッドロックが発生するようですが、二つのトランザクションので、互いにブロックする。注文を入れ替えると助けになるでしょうか?最初に数えてデキュー/エンキューしますか?