Я пытаюсь приблизительно измерить время, необходимое для завершения sh набора асинхронных задач. Мой подход
var stopwatch = Stopwatch.StartNew();
await Task.WhenAll(tasks);
stopwatch.Stop();
Я сижу и жду, пока операция завершится sh более 5 минут, но секундомер скажет, что прошло 1,5 секунды.
Я также попробовал:
var stopwatch = Stopwatch.StartNew();
await Task.WhenAll(tasks).ContinueWith(task => stopwatch.Stop());
... но все равно сообщается, что прошло всего 1,5 секунды, но для запуска все еще требуется более 5 минут.
tasks
- переменная типа IEnumerable<Task<T>>
.
Я изо всех сил пытаюсь найти способ диагностировать это и надеялся, что смогу помочь. Спасибо!
Обновление
Вот более полный пример:
public async Task<BulkOperationResponse<Source>> BulkInsertSourceDocumentsAsync(IEnumerable<Source> documents)
{
_logger.LogInformation("Beginning bulk insert...");
var tasks = new List<Task<OperationResponse<Source>>>(documents.Count());
tasks.AddRange(documents.Select(document =>
_orderStatusesContainer.CreateItemAsync(document, new PartitionKey(document.CUSTACCOUNT))
.CaptureOperationResponse(document)));
var response = await ExecuteTasksAsync(tasks);
return response;
}
public async Task<BulkOperationResponse<T>> ExecuteTasksAsync<T>(
IReadOnlyCollection<Task<OperationResponse<T>>> tasks)
{
_logger.LogInformation($"Executing {tasks.Count} tasks");
// TODO: This seems to be reporting the wrong time
// Opened an issue on GitHub: https://github.com/MicrosoftDocs/azure-docs/issues/53193
var stopwatch = Stopwatch.StartNew();
await Task.WhenAll(tasks);
stopwatch.Stop();
_logger.LogInformation($"Finished {tasks.Count} tasks in {stopwatch.Elapsed}");
return new BulkOperationResponse<T>
{
TotalTimeTaken = stopwatch.Elapsed, // TODO: Confirm time is correct.
TotalRequestUnitsConsumed = tasks.Sum(task => task.Result.RequestUnitsConsumed),
SuccessfulDocuments = tasks.Count(task => task.Result.IsSuccessful),
Failures = tasks.Where(task => !task.Result.IsSuccessful)
.Select(task => (task.Result.Item, task.Result.CosmosException)).ToList()
};
}
В моем тесте я импортирую 400 000 документов, и все они успешно завершены через 5 минут.