2013-03-17 11 views
11

awaiters와 awaitables를 하나 이상 만들면 C#으로 동시 루틴을 구축 할 수 있습니까?C# async, 작업없이 대기

가 이상적으로 같은 것을 쓸 수 있도록하고 싶습니다 : 나도 내가 명시 적으로 어떤 MoveNext를 함께 반복 할 수있는 또 다른 비동기 방식의 내부 또는 것을 기다릴 수있는 클릭 방식에서 뭔가 취득 후

void async Click() { 
    var mouse_position = await left_mouse_click(); 
    await shoot_projectile(); 
} 

및/GetResult 메서드입니다.

최종 목표는 게임 개발 프레임 워크 (http://casanova.codeplex.com)에 대해 C# async/await와 F # 모나드 코 루틴을 통합해야한다는 것입니다.

답변

7

awaiters와 awaitables를 하나 이상 만들면 C#으로 동시 루틴을 만들 수 있습니까?

확실! 나는 blog post을 사용하여 을 사용하여 간단한 coroutines를 만들고 Jon Skeet은 간단한 coroutine을 빌드하기 위해 사용자 지정 대기 시간을 사용하는 blog post을 가지고 있습니다.

하지만 질문과 의견의 나머지 부분을 살펴보면, coroutines가 정말로 원하는 것인지 확신 할 수 없습니다. 대기 시간을 "반복"하려면 가장 좋은 내기는 Reactive Extensions (async과 잘 상호 작용 함)입니다. "비동기 출력"을위한 C# 언어 기능은 없습니다.

+0

네, 그렇게 보입니다. 난 그냥 비동기 내부에서 얻을 수 있어야하고 외부 루프에서 모든 결과 출력을 통해 단계지만,이 작업을 수행하는 방법에 대한 정보를 찾을 수 없습니다 ... –

+1

'작업's을 위해 설계되지 않았습니다. Rx 팀은 당신이 묘사하고있는 동작을 가진'IAsyncEnumerator'에 대한 작업을 시작했습니다. (오래된 Channel9 비디오가 있습니다.) 그러나 거의 모든 것이 올바른 접근 방식이 아니기 때문에 버려진 것입니다. 대신 정규 Rx를 사용하는 것이 좋습니다. –

+0

연속성을 글로벌 지속성 목록에 추가하면 맞춤식 대기 시간 내에서 나 자신을 풀 수 있으며 필요한만큼 에뮬레이션 할 수 있습니다. 그래도 비 void 비동기 메서드를 원한다면 작업 을 반환해야하지만 이상하게 보입니다! –