デバイスと接続して動作するライブラリを開発しました。例えば:
public bool Connect(string ip)
{
try
{
// try connect to device
}
catch (Exception ex)
{
// trow custom exception
}
}
これは問題ありませんが、ライブラリにTPLを含めることにしました。
私が直面している問題は、値を返す方法のロジックにあります。IPを渡す代わりに、IPのリストを渡します。10台のデバイスに接続したいとします。5台は問題なく、他の5台は故障しています。次のようなコードをイメージしています。
public Dictionary<Device, bool> Connect(List<Device> device)
{
try
{
// TPL try connect to device
}
catch (AggregatedException ex)
{
// trow custom exception
}
}
誰かがこのメソッドを呼び出すと、例外を受け取るだけです。この場合は簡単ですが、たとえば、Dictionary<Device, List<Logs>> GetLogs(List<Device> device)
データのある5つのデバイスと障害のある5つのデバイスがあるような別のメソッドがある場合です。
正しい接続の結果と障害のある接続のエラーを返すための最良の方法は何ですか?接続はいくつかの理由で失敗する可能性があります。
アップデート
私はこれを試しました:
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}"