У меня есть простая функция, которая берет сообщение из очереди и сохраняет его в таблице хранения. Я ожидаю, что в некоторых случаях табличная сущность с такими же данными уже может существовать. По этой причине я добавил обработку исключений, чтобы пропустить ситуацию такого типа и пометить сообщение в очереди как обработанное. Несмотря на то, что исключение обрабатывается сейчас, скрипт-хост информирует меня об ошибке, и сообщение все еще находится в очереди.
Я полагаю, это вызвано тем, что я использую привязку таблицы, которая находится на границе между хостом и моим кодом. Я прав? Должен ли я использовать клиент таблицы в моем коде вместо привязки? Есть ли другой подход?
Пример кода для генерации этой ситуации:
[FunctionName("MyFunction")]
public static async Task Run([QueueTrigger("myqueue", Connection = "Conn")]string msg, [Table("mytable", Connection = "Conn")] IAsyncCollector<DataEntity> dataEntity, TraceWriter log)
{
try
{
await dataEntity.AddAsync(new DataEntity()
{
PartitionKey = "1",
RowKey = "1",
Data = msg
});
await dataEntity.FlushAsync();
}
catch (StorageException e)
{
// when it is an exception that informs "entity already exists" skip it
}
}