2014-12-07 7 views
0

이것이 올바른 방법이라고 생각합니다.하지만 너무 많은 단어로 된 명확한 문서를 찾을 수 없습니다.다른 비동기 루틴에서 비동기식 루틴 호출하기

저는 루틴이 입력에 대해 처리를하고 루틴 B에 위임하여 실제 작업을 수행하는 관련 루틴을 가지고 있습니다. 예를 들어, 정수 인덱스 또는 일부 값의 문자열 키를 기반으로 일부 작업을 수행 할 수 있다고 가정합니다. 이가되도록, RoutineB는 비동기가되고 싶어 가정, 이제

// Do the work based on the int index 
public bool RoutineA(int index) 
{ 
    // Find the key 
    string key = {some function of index}; 

    // Let the other overload do the actual work 
    return RoutineB(key) 
} 

// Do the work based on the string key 
public bool RoutineB(string key) 
{ 
    bool result = {some function of key}; 
    return result; 
} 

:

// Do the work based on the string key 
public async Task<bool> RoutineB(string key) 
{ 
    bool result = await {some function of key}; 
    return result; 
} 

겠어요 -를 좀 루틴이 오버로드 키를 취 인덱스 하나 걸리는 일이있을 수 있습니다 .. 내 질문은, RoutineA가 RoutineB를 호출하기 전에 자체의 비동기 처리를하지 않는다고 가정하면, 이렇게 코딩 할 수 있습니까? 내가 루틴을 async으로 표시하지 않는다는 것과 루틴 B에 대한 호출이 await이 아니기 때문에 상태 머신을 빌드 할 때 오버 헤드를 줄일 수 있습니다.

// Do the work based on the int index 
public Task<bool> RoutineA(int index) 
{ 
    // Find the key 
    string key = {some function of index}; 

    // Let the other overload do the actual work 
    return RoutineB(key) 
} 

답변

1

글쎄, 약간의 차이가 있습니다. 키를 찾는 코드가 예외를 throw한다고 가정합니다. 첫 번째 코드에서 오류가 발생한 작업이 결과입니다. 두 번째 코드에서는 예외가 즉시 호출자에게 전달됩니다. 어느 쪽이 바람직한지는 정직한 당신의 상황에 달려 있습니다.

그러나 그 외의 효과는 거의 동일합니다.

관련 문제