У меня есть несколько веб-сервисов, которые реализуют один и тот же интерфейс, который я хочу вызвать из другого приложения.
Для каждого веб-сервиса мне нужно вызвать два метода, A () и B () в этом порядке, и я хочу проверить ответ от каждого вызова на наличие ошибок (не исключений). И я пытаюсь сделать все это, используя async, но я пытаюсь понять, когда я могу проверить ответ от метода на наличие ошибок, если я проверяю после вызова async, то я получаю исключение NullReferenceException (по понятным причинам), но какЯ объединяю результаты двух методов?
Ниже приведена схема кода без каких-либо проверок результатов
List<DeviceClient> clients; // List of client interfaces to web-service
var startTasks = clients.Select(dc => SetupDevice(dc.Client);
await Task.WhenAll(startTasks);
...
private async Task SetupDevice(DeviceClient client)
{
await client.A();
await client.B();
}
Что я хотел бы сделать, это проверить результат из A () и, если это не удается, выдается исключение и то же самое для B ().
private async Task SetupDevice(DeviceClient client)
{
var respA = await client.A();
if (respA.Error)
throw new Exception("A failed");
var respB = await client.B();
if (respB.Error)
throw new Exception("B failed");
}
Однако respA будет нулевым, поскольку вызов A () является асинхронным. Возможно ли это, или мне нужно вызывать GetAwaiter (). GetResult () при вызове A () и B () отдельно?
Я все же хотел бы вызывать различные клиенты асинхронно, даже если мне приходится обрабатывать отдельные вызовы A () и B () на каждом клиенте синхронно - если это имеет смысл.
Спасибо, Канис.