重複検出をオンにし、両方のメッセージの MessageId が同じ場合、最初のメッセージのスケジュールされたエンキュー時間の前に 2 番目のメッセージを送信すると、スケジュールされたメッセージは効果的にキャンセルされますか?
次のサンプル コードでテストを行ったところ、2 番目のメッセージが無視されることがわかりました。
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
for (int i = 0; i < 2; i++)
{
if (i == 0)
{
client.SendAsync(new BrokeredMessage("testmes1") { MessageId = "test1", ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(60) }).Wait();
}
else
{
client.SendAsync(new BrokeredMessage("testmes2") { MessageId = "test1" }).Wait();
}
}
キューからメッセージを受け取ります:
client.OnMessage(message =>
{
Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>()));
Console.WriteLine(String.Format("Message id: {0}", message.MessageId));
});
出力:

スケジュールされたメッセージをキャンセルしたい場合は、そのスケジュールされたメッセージがアクティブになる前にCancelScheduledMessageAsync() メソッドを呼び出すことができます。
client.CancelScheduledMessageAsync(sequenceNumber).Wait();