2017-11-21 10 views
0

비동기 프로그래밍의 새로운 기능입니다. 비동기 메서드가 있는지 알고 싶습니다. 내 메서드에서 동기화 메서드를 호출하는 것이 맞습니까? 그렇다면 이점은 무엇입니까?호출 sysnc 비동기 메서드의 메서드?

public async Task ParseFile(int requestId) { 
    await BulkInsertFileRecords(requestId) ; 
    GetInfo();//it’s sysnc method 
} 

protected async Task BulkInsertFileRecords(int requestId) { 
    BulkInsert(requestId);// it’s sysnc method 
} 
+1

예 비동기 메서드 내에서 동기 메서드를 호출 할 수 있습니다. –

+0

예,'async' 메소드에서 동기 코드를 사용할 수 있습니다. –

답변

0

당신은 확실히 비동기 것과 동기 메서드를 호출 할 수 있습니다 : 이 샘플 코드입니다. 이러한 메소드는 비동기 메소드의 컨텍스트에서 일반적인 방식으로, 즉 동 기적으로 실행됩니다.

은 물론, 단순히 동기 방법을 비동기 실행의 장점을주지 않을 것 인 async 하나에 동기 방법을 포장 : 당신이 직접 BulkInsert를 호출 할 경우 BulkInsertFileRecords는 것 정확히 방법을 실행하는 것입니다. 실제로 BulkInsertFileRecords에는 await이 없기 때문에 async을 그대로 유지할 필요가 없습니다. 당신은 await없이 void 동기 방법으로 재 작성하고 호출 할 수 있습니다 :

당신이 동기화 방법은 귀하의 UI를 변경 해야하는 경우 당신이 무엇을 기대하지 않은 결과를 얻을 수 있음을 주목해야한다
protected void BulkInsertFileRecords(int requestId) { 
    BulkInsert(requestId); 
} 
0

어떤 방법으로.

UI가 바인드하는 데이터는 기본 UI 스레드 컨텍스트 내에서 트리거가 변경되도록 속성을 변경해야합니다.

호출중인 동기화 메서드에이 메서드가 필요한 경우 메서드를 호출 할 수 있지만 해당 스레드에서 호출되도록 추가 코드가 필요합니다.

Application.Current.Dispatcher.Invoke(() => 
    { 
     BulkInsert(requestId); 
     //More UI sync calls here... 
    }); 

이렇게하면 주 스레드에서 실행되는 동안 비동기 스레드에서 호출이 동 기적으로 발생합니다. 어떤 시점에서 주 스레드에서 호출이 발생하고 기다리지 않으려면 대신 InvokeAsync를 호출하면됩니다.