2015-01-16 4 views
0

이 두 함수는 작동하지만 내 문제는 익명 함수 (인수로 ServiceCheck을받는 함수)가 호출되지 않는다는 것입니다.
CheckServiceConnection 함수가 익명 함수가 실행되도록 문자열을 반환하도록하려면 어떻게해야합니까?익명 함수를 실행하는 방법

internal async void CheckServiceConnection() 
{ 
    await _da.CheckServiceConnection((ServiceCheck) => 
    { 
     GeneralEventArgs args = new GeneralEventArgs(); 
     args.GeneralObject = (object)ServiceCheck; 
     ServiceConnection(this, args); 
    }); 
} 

public Task<string> CheckServiceConnection(Action<string> OnComplited) 
{ 
    var tcs = new TaskCompletionSource<string>(); 

    ws.CheckServiceCompleted += (s, e) => 
    { 
     if (e.Error != null) 
      tcs.TrySetException(e.Error); 
     else if (e.Cancelled) 
      tcs.TrySetCanceled(); 
     else if (e.Result != null) 
      tcs.TrySetResult(e.Result); 
    }; 
    try 
    { 
     ws.CheckServiceAsync(); 
    } 
    catch (Exception ex) 
    { 
     ws.LogAsync(ex.Message, "DataManager.CheckServiceConnection()"); 
    } 
    return tcs.Task; 
} 

그 같은 CheckServiceConnection 기능을 쓸 때 - 그것은 을 노력을 (그리고 CheckServiceConnection가 인수받지 물론) :

internal async void CheckServiceConnection() 
{ 
    var ServiceCheck = await _da.CheckServiceConnection(); 
    GeneralEventArgs args = new GeneralEventArgs(); 
    args.GeneralObject = (object)ServiceCheck; 
    ServiceConnection(this, args); 
} 
+0

'await _da.CheckServiceConnection ((ServiceCheck)'라고 쓰여있는 첫 번째 괄호가 올바른지 확인하십시오. – Slime

+0

예, ServiceCheck는 CheckServiceConnection이 완료되면 익명 함수로 돌아 오는 문자열입니다 – user1731254

답변

2

귀하의 CheckServiceConnection 방법은 전달 된 OnComplited 액션 인수를 호출하지를 . 그래서 첫 번째 함수에서 익명 함수가 호출되지 않습니다.

익명의 함수를 CheckServiceConnection에 전달하고 호출하려면 해당 함수를 호출해야합니다. 즉, 다음과 같은 행을 추가하십시오.

OnComplited("some string"); 
+0

그건 분명하지만, 내 문제는 어떻게 tccs.TrySetResult (....)와 함께 OnComplited ("일부 문자열")을 래핑합니까? – user1731254

0

절대 인수를 호출하지 않습니다. 자동으로 호출되지 않습니다.

그러나 어쨌든이 작업을 수행 할 이유는별로 없습니다. 당신은이 방법을 기다리고 있습니다, 그래서 이것을하지 않는 것이 어떻습니까? 또한

internal async void CheckServiceConnection() 
{ 
    var result = await _da.CheckServiceConnection(); 

    GeneralEventArgs args = new GeneralEventArgs(); 
    args.GeneralObject = result; 
    ServiceConnection(this, args); 
} 

, 당신은 CheckServiceConnection 방법은 Task을 반환해서는 안 확신? 그것은 거의 좋은 생각이 아닙니다.

모두 당신이 통지, 비동기 코드 등등에 대해 서로 다른 많은 접근법을 혼합하고있는 것처럼 보입니다. 어쩌면 디자인을 조금 수정하고 싶습니까?

+0

고마워요 - 내 생각은 그냥 더 우아하게하려고했다 .... – user1731254

+0

@ user1731254 우아한 elegent 위해서 일반적으로 나쁜 생각입니다. "단순한"대신 목표로보십시오 :) – Luaan

관련 문제