3 .net c# events multithreading asynchronous
我正在设置一个需要可靠且可扩展的WCF客户端和服务器场景,并且我正在尝试使其成为多线程的一部分.不可否认,我没有丰富的多线程经验.
在客户端上,来自服务器的回调(在本例中为"OnMessage")会触发应在后台传递的客户端事件.我将客户端的CallbackBehavior ConcurrencyMode设置为Single(至少目前为止).所以为了回复回调,而不是正常调用处理程序(处理程序(发送者,eventargs或handler.Invoke ...)我正在调用handler.BeginInvoke.
一切正常,但在回调中我想知道我是否需要显式调用EndInvoke或者我基本上什么都不做(这是我缺乏多线程经验).
public void OnMessage(Message message)
{
EventHandler<MessageEventArgs> handler = OnServerMessage;
if (handler != null)
handler.BeginInvoke(this, new MessageEventArgs(message), CompleteHandler, handler);
}
public void CompleteHandler(IAsyncResult result)
{
((EventHandler<MessageEventArgs>)result.AsyncState).EndInvoke(result);
}
Run Code Online (Sandbox Code Playgroud)
我可以用直接引用handler.EndInvoke或者一个空方法替换CompleteHandler,或者可能还有更多我应该做的事情吗?
此外,此时,事件订户阻止等待来自控制台的用户输入.当应用程序完成时,它将阻止等待数据库,或者从底部到顶部异步(所以这可能没有必要,但我仍然想知道).
是的,你必须.唯一的方法是找出被调用的方法是否引发了异常.并清理调用的远程状态,因此它可以被垃圾收集,而不是让它磨蹭10分钟.
归档时间: |
|
查看次数: |
3367 次 |
最近记录: |