Получение «Эта операция запрещена для несвязанных объектов» при попытке наблюдения за пакетной задачей Azure. - PullRequest
0 голосов
/ 11 июня 2019

Я хочу выполнить простую задачу в пакетном режиме Azure, дождаться ее завершения и получить результат:

using (var client = _CreateBatchClient())
{
    var monitor = client.Utilities.CreateTaskStateMonitor();

    var task = new CloudTask(Guid.NewGuid().ToString(), "echo hello world");
    await client.JobOperations.AddTaskAsync("Test", task);
    await monitor.WhenAll(new List<CloudTask> { task }, TaskState.Completed, _timeout);

    var result = task.ExecutionInformation.Result;
}

И строка WhenAsync выдает System.InvalidOperationException: 'This operation is forbidden on unbound objects.'

Сообщение довольно неясно, тогда как я не далеко от учебника . Что не так?

1 Ответ

1 голос
/ 11 июня 2019

Из этого кода не очевидно, что на самом деле пакет Azure не знает, как определить задачу.Задание содержит задания, но задание не имеет ссылки на задание, на котором оно выполняется.И идентификатор задачи также не идентифицирует задачу глобально, он должен быть уникальным только внутри задания.

Это, вероятно, означает здесь «несвязанные объекты».Монитор просто не понимает, что смотреть.На самом деле, если строка WhenAsync прокомментирована, следующая выдает аналогичную InvalidOperationException: 'The property ExecutionInformation cannot be read while the object is in the Unbound state.'

Так что правильный путь - ссылаться на задачу через задание:

using (var client = _CreateBatchClient())
{
    var monitor = client.Utilities.CreateTaskStateMonitor();

    var id = Guid.NewGuid().ToString();
    var taskToAdd = new CloudTask(id, "echo hello world");
    await client.JobOperations.AddTaskAsync("Test", taskToAdd);

    var taskToTrack = await client.JobOperations.GetTaskAsync("Test", id);
    await monitor.WhenAll(new List<CloudTask> { taskToTrack }, TaskState.Completed, _timeout);
}

Сравните:

task to add task to track

И чтобы получить информацию о результате, нужно снова «найти» задачу в задании,или это будет ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...