2014-04-21 2 views
1

전화를 걸고 응답을 평가하는 다음 코드가 있습니다. 응답이 보류 중이면 2 초 후에 다시 전화를 걸려고합니다.특정 시간이 지나면 비동기 메서드 호출

여기서 "대기 2 초"를 수행하는 방법이나 동기식 방식으로 작동하는 타이머를 사용하는 방법을 모른다.

PCL 프로젝트의 제약으로 인해 제한됩니다.

private async Task<Response> ExecuteTask(Request request) 
{ 
    var response = await GetResponse(); 

    switch(response.Status) 
    { 
     case ResponseStatus.Pending: 
      //wait 2 seconds 
      response = await ExecuteTask(request); 
    } 
    return response; 
} 

다음 코드는 정상입니까?

에서
System.Threading.Timer timer; 

private async Task<Response> ExecuteTask(Request request) 
{ 
    var response = await GetResponse(); 

    switch(response.Status) 
    { 
     case ResponseStatus.Pending: 
     timer = new System.Threading.Timer(async obj => 
     { 
      response = await ExecuteTask(request); 
     }, null, 1000, System.Threading.Timeout.Infinite); 
    } 
    return response; 
} 
+0

사용 기다려,하지만 당신은 Task.Delay을 기다리고 있었다 비동기? 기본적으로 Thread.Sleep과 동일한 작업 (내 지식). – BradleyDotNET

+0

일종의 재시도 작업을 설정하려고하는 것 같습니다. 비동기로 구현하는 방법에 대한 아이디어를 얻으려면이 대답의 맨 아래를보고 싶을 것입니다. http://stackoverflow.com/a/10494424/1181408 – cgotberg

+0

타이밍을 수행하는 방법을 모르겠습니다. 2 초 동안 무엇을 사용합니까? 타이머? – alitaleg

답변

1

당신은 내가이 매우 좋은 아이디어라고 주장하지 않을거야 Task.Delay

private async Task<Response> ExecuteTask(Request request) 
{ 
    var response = await GetResponse(); 

    switch(response.Status) 
    { 
     case ResponseStatus.Pending: 
      await Task.Delay(TimeSpan.FromSeconds(2)) 
      response = await ExecuteTask(request); 
      break; 
    } 
    return response; 
} 
+0

PCL 프로젝트에서는 Task.Delay를 사용할 수 없습니까? 내 프로젝트에서 사용할 수없는 것 같습니다. – alitaleg

+1

대신 Microsoft.Bcl.Async에서 PCL과 함께 사용할 수 있습니다 (http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable). aspx – i3arnon

+0

@alitaleg 질문에 세부 사항을 추가하여 PCL로만 제한한다고 제안합니까? –

관련 문제