2009-09-10 2 views
1

C에서 단방향 호출 메서드를 구현하고 싶습니다. 우리는 웹 서비스에서 ONE Way 속성을 사용하여 구현할 수 있음을 알고 있습니다. Delegate와 비동기 호출을 수행했습니다. 어떤 사람이 동일한 샘플 코드를 사용할 수 있다면.C#에서 단방향 호출

+4

좀 더 구체적으로 표현할 수 있습니까? 나는 누구도 당신이 말하는 것을 알지 못할지 모르겠습니다. –

답변

4

단방향 통화를 에뮬레이트하는 가장 쉬운 방법은 스레드 풀로 밀어 넣는 것입니다. 위 비록

ThreadPool.QueueUserWorkItem(delegate { DoSomeStuff("abc"); }); 

, 포장 충분히 쉬울 것이다 예외 문제에서 약간의 고통 :

(편집 :! 죄송합니다, borked 예외 처리 ... 고정)

public static void OneWay(Action action) { 
    if (action == null) throw new ArgumentNullException("action"); 
    ThreadPool.QueueUserWorkItem(delegate { 
     try { action(); } 
     catch (Exception ex) { 
      Trace.WriteLine(ex); 
     } 
    }); 
} 
... 
OneWay(() => DoSomeStuff("abc")); 
+0

댓글 중 하나의 링크를 따라 Phil Haack 게시물이 나옵니다. Phil Haack 게시물입니다. Phil Haack 게시물입니다.이 도움말은 기본적으로 화재에 대한 배경 및 토론과 함께이 훌륭한 답변에 설명되어있는 기술입니다. 이 포스트는 "비동기식 화재 및 램다 (Lamdas)"를 잊어 버렸습니다. OneWay 메시징은 일반적으로 FireAndForget으로 알려져 있기 때문에이 답변이 바로 돈에 해당합니다. Phil의 sytax는 C# 3.0을 사용하는 경우 좀 더 간결합니다. 어느 쪽이든, 나는이 기사를 읽었을 것이다. http://haacked.com/archive/2009/01/09/asynchronous-fire-and-forget-with-lambdas.aspx – Nathan

0

당신은 메서드 호출

public void MyOneWay() 
{ 
    //you can replace the anonymous function with any function you define, if you want 
    var d = delegate(int a) { Console.Write(a);}; 
    d.BeginInvoke(); 
} 

참고 비동기 대리자를 포장 할 수 있습니다 : 이것은 의사입니다.

+1

MSDN은 BeginInvoke가 EndInvoke와 쌍을 이루어야한다는 것을 매우 구체적으로 다루고 있습니다. BeginInvoke. –

+0

여기에서 "중요 참고 사항"을 참조하십시오. http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx –

+0

@Marc는 사용자가 사용하도록 설정되었거나 장면 뒤에 있기 때문에 화가 나니? 저는 화재와 잊을 수있는 능력을 갖춘 대표단이 제공하는 것을 좋아합니다 ... – cjk