장치를 연결하고 작동하는 라이브러리를 개발했습니다. 예를 들어 :TPL 반환 값 및 예외
public bool Connect(string ip)
{
try
{
// try connect to device
}
catch (Exception ex)
{
// trow custom exception
}
}
이 좋아,하지만 지금은 내 라이브러리 TPL에 포함하기로 결정했습니다.
내가 직면 한 문제는 값을 반환하는 논리에 있습니다. IP를 전달하는 대신 IP 목록을 전달합니다. 10 개 개의 장치에 연결할 상상해 5 확인하고 다른 5 내가 이미지를 폴트하는 코드처럼 : 누군가가이 메소드를 호출하면 그들은 단지 exeption를받을
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 개의 장치가 오류를 일으 킵니다.
올바른 연결과 오류가 발생한 연결에 대한 결과를 반환하는 가장 좋은 방법은 무엇입니까? 연결은 여러 가지 이유로 실패 할 수 있습니다. 내가 시도
UPDATE이 :
Id = 1, Status = RanToCompletion, Method = "{null}", Result = "5 Test"
: 내가
return dic
에 침입 경우
Service1Client sc = new Service1Client();
var a = sc.GetData3(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 클라이언트에서
그러나 var a
에 난 단지 참조 :
Id = 1, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
일부 고객은 이것을 SDK로 사용하지만이 SDK를 사용하여 WCF를 만드는 확장 프로그램이 있습니다. WCF를 사용하는 사람들 중 일부는 PHP를 사용합니다. DeviceResult : Device를 작성하고 오류 및 예외에 대한 bool을 포함하는 것을 어떻게 생각하십니까? – Eisenrich
@Eisenrich : 그렇게함으로써 TPL을 사용하면 이익의 절반을 무효화 할 수 있습니다. 개인적으로 저는 작업 기반 접근법이 가장 깨끗하고 가장 관용적이라고 생각합니다. –