2014-11-11 4 views
0

.NET 4.5 async/await을 구현하려고하는데 몇 가지 문제가 있습니다. 내가 어떻게 든에 결과를 포장 할 필요가비동기 작업에서 개체 목록을 반환하는 방법

public Task<List<PageDto>> GetPageList(int jobTypeId) 
{ 
    var retval = new List<PageDto>(); 

    try 
    { 
     retval = 
      (from p in _connection.Table<PageDto>() 
       where p.JobTypeId == jobTypeId 
       select p).ToList(); 
    } 

    catch (Exception ex) 
    { 
     Logger.Exception(ex); 
    } 

    return retval; 
} 

:

private async void GetPages() 
{ 
    PageList = await _dataService.GetPageList(JobTypeId); 
} 

IDataService이 같은이

public interface IDataService 
{ 
    Task<List<PageDto>> GetPageList(int jobTypeId); 
} 

및 DataService.GetPageList과 같습니다

이 코드를 할 수는 없지만 어떻게해야 할지를 알 수 없습니다.

아이디어가 있으십니까?

내가 ToListAsync를 사용할 수 없습니다 때문에 내가 사용하고있어 SQLLite 라이브러리에 제한하지만 어떻게 이런 일에 대한 UPDATE?

답변

5

먼저 비동기 방식을 사용해야합니다 (outside-in과 비동기식으로 "부과하지"않음). 이 경우에, 나는 당신이 EF6를 사용하는 가정, 그래서 당신은 할 수 :

retval = await 
    (from p in _connection.Table<PageDto>() 
     where p.JobTypeId == jobTypeId 
     select p).ToListAsync(); 

을 그리고 당신은 당신의 방법 async 표시 할 수 있습니다

public async Task<List<PageDto>> GetPageListAsync(int jobTypeId) 

내가 사이드 참고로, 나는 Async 추가를 접미사는 Task-based Asynchronous Pattern을 따르십시오.

자세한 내용은 async intro을 확인하십시오.

+0

Stephen, 작업을 반환하지 않은 이유는 'ToListAsync'에서 반환되고 기다리는 중입니까? –

+0

이 예제에서는 오류 처리 방식을 변경합니다. op가 사용하고있는 오류 처리 전략은 내가 스스로 선택할 수있는 것이 아니지만 코드의 나머지 부분이 오류가 기록되었다가 데이터 서비스에서 무시된다고 가정하면 일관성을 유지하는 것이 중요합니다. –

+0

나는 그것을 추측했다, 해명을위한 감사. –

관련 문제