2016-09-01 5 views
1

원격으로 제어되는 응용 프로그램이 있습니다. 이 프로그램은 요청시 애니메이션을 재생하고 완료되면 클라이언트에 응답해야합니다. 이것은 내가 지금 가지고있는 코드 (그리고 제대로하지 작동) :Nancy route - 콜백시 반환 값

public void PlayAnimation(Action callback) 
{ 
    DoubleAnimation fadeOut = new DoubleAnimation 
    { 
     //settings 
    }; 
    fadeOut.Completed += (s, e) => callback(); 
    BeginAnimation(OpacityProperty, fadeOut); 
} 


Get["/playAnim/{id}"] = param => 
{ 
    MainWindow.PlayAnimation(() => {/* Need to call "return" statement here */}); 
    return "Ok"; // This is where the value is returned now. 
    //The execution gets here before animation was completed. 
}; 

내가 아는이, 낸시도 async-await 구문을 지원하지만 DoubleAnimation하지 않는 (또는합니까?). 그렇다면 애니메이션을 재생 한 후 다음에 낸시가 에 응답하게하려면 어떻게해야합니까?

답변

1

Nancy는 비동기 메소드를 지원하므로 여기서 TaskCompletionSource을 사용할 수 있습니다. 코드의 두 번째 부분은 다음과 같습니다.

Get["/playAnim/{id}"] = async param => 
{ 
    var completionSource = new TaskCompletionSource<bool>(); 
    MainWindow.PlayAnimation(() => { completionSource.SetResult(true); }); 

    await completionSource.Task; 

    return "Ok"; 
};