gpt4 book ai didi

c# - WCF 异步通知订阅者

转载 作者:行者123 更新时间:2023-11-30 12:51:55 26 4
gpt4 key购买 nike

这是我的 WCF 服务。我想通知多个订阅者一些更新并异步执行。我怎么做?

// Callback contract
public interface IMyServiceCallback
{
[OperationContract]
void Notify(String sData);
}

public class MyService:IMyService
{
List<IMyServiceCallback> _subscribers = new List<IMyServiceCallback>();

// This function is used to subscribe to service.
public bool Subscribe()
{
try
{
IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
if (!_subscribers.Contains(callback))
_subscribers.Add(callback);
return true;
}
catch
{
return false;
}
}

// this function is used to notify all the subsribers
// I want ForEach to be asynchronous.
public void OnGetMsg(string sData)
{
_subscribers.ForEach(
callback =>
{
if (((ICommunicationObject)callback).State == CommunicationState.Opened)
{
callback.Notify(sData); //THIS OPERATION
}
else
{
_subscribers.Remove(callback);
}
});
}
}

最佳答案

可以放到线程池中:

 ThreadPool.QueueUserWorkItem(o => callback.Notify(sData));

请注意,当您有很多不良订阅者时,它可能会阻塞您的线程池。您可能想捕获异常并在失败时删除回调。

更新:如果您不想使用 .NET 线程池,那么您可以自己滚动或使用例如 SmartThreadPool

关于c# - WCF 异步通知订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com