저는 최근에 제가 다룰 수있는 모든 것을 배우려고 눈물을 흘 렸습니다 .Net Multithreading. (그것에 익숙해 지지만 여전히 배워야 할 것이 많다고 생각합니다.) 지금 내가 일반적이로 알려져 APM (비동기 프로그래밍 모델)에 초점을 해요 :비동기 프로그래밍 모델을 구현하는 좋은 방법입니까?
//non async method
public int DoSomeWork(int arg)
{
//do something and return result
}
//async version
public IAsyncResult BeginDoSomeWork(int arg, AsyncCallback callback, object @object)
{
}
public int EndDoSomeWork(IAsyncResult result)
{
}
를 자, 내가 어떤 라이브러리를 쓰고 있어요 가정 해 봅시다, 내가 소비하는 사람이라면이 기능을 노출 할 내 API,이 패턴을 구현하는 방법에 대해 생각했다. IAsyncResult 인터페이스를 구현하는 것도 가능하지만 상당히 복잡해 보입니다. 대리자를 사용하는 것이 수용 가능한 해결책이라면 제 질문입니다. 그것이 의미하는 바는 다음과 같습니다.
public class MyClass
{
private Func<int, int> func;
//non async method
public int DoSomeWork(int arg)
{
//do something and return result
}
//async version
public IAsyncResult BeginDoSomeWork(int arg, AsyncCallback callback, object @object)
{
this.func = new Func<int, int>(DoSomeWork);
var asyncResult = this.func.BeginInvoke(arg,callback,object);
return asyncResult;
}
public int EndDoSomeWork(IAsyncResult result)
{
return this.func.EndInvoke(result);
}
}
기본적으로 모든 대리인은 BeginXxx 및 EndXxx 기능이 포함되어 있습니다. 이를 활용하고 IAsyncResult를 노출하는 것이 좋을까요? 아니면 내가 생각하지 않은 무언가가 잘못되었습니다.
예일뿐입니다. 실제 구현을 무시하고 (어리석게도 무의미한 것처럼 보임), 위임자를 사용하는 것에 대해 묻습니다. IAsyncResult입니다. – BFree
동기식 버전과 비동기식 버전이 모두 제공되기 때문에 클라이언트는 여전히 해당 결정을 내립니다. OP는 선택된 방법이 APM을 구현하는 좋은 방법인지 아닌지에 대해 더 우려하고 있습니다. – Crippledsmurf
@BFree, i c now. – Benny