2015-02-04 4 views
0

라이브러리에 다음 코드가 있습니다 Helper.dll. 이 어셈블리에는 Products.XML이라는 XML 파일이 포함되어 있습니다. 방법 GetProducts 잘 작동합니다. 그러나 동기식이기 때문에 응답하는 데 몇 초가 걸립니다. 이로드 작업이 진행될 때 UI를 릴리스하고 싶습니다.비동기 호출 동기화 변경

에는 비동기 호출이 XDocument.Load 같은 XML 운영에 LINQ 사용할 수 없습니다 있습니다, 그래서 여기 asyncawait을 사용할 수 없습니다.

감사합니다.

public static class LookupUtil 
{ 
    public static IEnumerable<XElement> GetProducts() 
    { 
     var stream = Assembly. 
      GetExecutingAssembly(). 
      GetManifestResourceStream("Helper.Products.XML"); 
     var reader = new XmlTextReader(stream); 
     var document = XDocument.Load(reader); 

     return document.Descendants("Products"); 
    } 
} 
+0

나는 'Task.Run'을 호출 코드에 사용하는 것을 권하고 싶다. 라이브러리 코드에서 비동기 동작을 위조하지 마십시오. –

답변

3

어떤 비동기 작업이없는 경우 해당 메서드 내부를 변경하고 동기를 유지하지 않습니다. 당신은 UI 스레드에서 호출

사용 Task.Run는 다른 스레드와 await 반환 된 작업에 그 동기 작업을 오프로드 :

var elements = await Task.Run(() => LookupUtil.GetProducts()); 

당신이 기본적으로 비동기 동기 코드의 블록을 취급하고하고 있습니다.

관련 문제