동일한 함수에서 나중에 반복적으로 호출 할 수 있도록 명명 된 람다 함수에서 함수를 만들고 싶습니다. async lambda function
나는Func<string, bool> pingable = (url) => return pingtest(url);
로하지만 작업으로 ping이 함수를 호출 할이 경우 작업없이/동 기적으로이 작업을 수행하는 데 사용, 그래서 작업의 반환 형식이 필요합니다.
이것은 내가 갇혀있는 곳입니다. 모든 들어
아래, 나는 점점 오전 컴파일 오류 : 나는 일반적으로 비록 함수를 선언 할 수 있지만, 나는이 작업으로 호출 할 수 없습니다
* Func<string, Task<bool>> pingable = (input) => { return pingtest(url); };
* Task<bool> pingable = new Task<bool>((input) => { return pingtest(url); });
:
Func<string, bool> pingable = (input) => { return pingtest(url); };
var tasks = new List<Task>();
* tasks.Add(async new Task(ping("google.de")));
모든 라인에게 I를 * copymile 오류가 발생했습니다.
http://dotnetcodr.com/2014/01/17/getting-a-return-value-from-a-task-with-c/은 솔루션에 대한 힌트를 갖고있는 것 같지만 샘플에는 제공된 입력 매개 변수가 허용되지 않습니다. (샘플이 단순화에서 촬영 :
Task<int> task = new Task<int>(obj => { return obj + 1; }, 300);
만들고 C#으로 명명 된 작업 람다 전화, 그리고 함수가 아닌 클래스 수준에 그들을 선언하고자하는 방법.
명명 된 람다를 여러 번 호출하려는 경우 (이 경우 여러 개의 URL). 당신이 코드를 요구하기 때문에/업데이트
편집 :
이Func<string, Task<bool>> ping = url => Task.Run(() =>
{
try
{
Ping pinger = new Ping();
PingReply reply = pinger.Send(url);
return reply.Status == IPStatus.Success;
}
catch (Exception)
{
return false;
}
});
var tasks = new List<Task>();
tasks.Add(ping("andreas-reiff.de"));
tasks.Add(ping("google.de"));
Task.WaitAll(tasks.ToArray());
bool online = tasks.Select(task => ((Task<bool>)task).Result).Contains(true);
이 이미 여기에 제안 된 솔루션을 사용합니다.
'pingtest'는 어떻게 보이나요? – i3arnon
여기에 삽입하려는 내용이 간략하게 나와 있습니다. 1 분 안에 해결책과 함께 편집에 추가하겠습니다. –