У меня есть библиотека, которая подключается и работает с устройствами. Например:Возвращаемое значение TCL и исключение
public bool Connect(string ip)
{
try
{
// try connect to device
}
catch (Exception ex)
{
// trow custom exception
}
}
Это нормально, но теперь я решил включить в мою библиотеку TPL.
Проблема, с которой я столкнулся, - это логика возврата значений. Вместо передачи IP-адреса вы передадите список IP-адресов. Представьте, что вы хотите подключить до 10 устройств и 5 в порядке, а другие 5 неисправны I Изображение код как:
public Dictionary<Device, bool> Connect(List<Device> device)
{
try
{
// TPL try connect to device
}
catch (AggregatedException ex)
{
// trow custom exception
}
}
Если кто-то называет этот метод они только получить Exeption, в данном случае это может быть легко, но, например, если у меня есть другой метод, например Dictionary<Device, List<Logs>> GetLogs(List<Device> device)
У меня было бы 5 устройств с данными и 5 устройств с ошибкой.
Каков наилучший способ возврата результата для правильных соединений и ошибок для неисправных? Соединение может завершиться по нескольким причинам.
UPDATE
Я попытался это:
public Dictionary<int, Task<string>> GetData3(int value)
{
Dictionary<int, Task<string>> dic = new Dictionary<int, Task<string>>();
Task<string>[] tasks = new Task<string>[value];
for (int i = 0; i < value; i++)
{
tasks[i] = Task.Factory.StartNew<string>((stateObject) =>
{
var a = (int)stateObject;
return a + " Test";
}, value);
dic.Add(i, tasks[i]);
}
Task.WaitAll(tasks);
return dic;
}
И в клиенте WS:
Service1Client sc = new Service1Client();
var a = sc.GetData3(5);
Если я перерыв в return dic
я могу увидеть результаты:
Id = 1, Status = RanToCompletion, Method = "{null}", Result = "5 Test"
Но в var a
я вижу только:
Id = 1, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
Некоторые клиенты используют это как SDK, но у нас есть расширение, которое использует этот же SDK для создания WCF. Некоторые из людей, использующих WCF, используют php. Что бы вы подумали о создании: DeviceResult: Device и включить bool для ошибки и исключения? – Eisenrich
@ Эйзенрих: Это похоже на то, что вы отрицаете половину преимущества использования TPL. Лично я считаю, что основанный на задачах подход является самым чистым и самым идиоматичным. –