1
我有一個帶有不同簽名的一堆方法的接口(這裏的上下文是一個WCF回調接口)。我的服務器有一個客戶列表。爲了響應事件,我想調用每個客戶端上的接口方法。在這個調用周圍有一堆鍋爐板代碼(檢查客戶端是否活着,如果此客戶端包含在回調列表中,請嘗試捕獲,如果操作失敗,則丟棄客戶端等)。什麼是將這個鍋爐板代碼放入通用CallBackClients(SomeKindOfGenericDeligate method_to_call)中的最好方法,其中method_to_call是其中一種接口方法。支持來電通用方法調用代碼
ICallback {
void Fish(string my_string);
void SuperFish(int my_int, double my_double);
... etc ...
}
CallBackClients(-- ?? generic delegate ?? --) {
foreach (IClientCallback client in client_list) {
// The boiler plate code:
if (((ICommunicationObject)client.callback).State == CommunicationState.Opened) {
try {
Do method call based on delagate/lamda code passed in - how ??
}
catch (Exception e) {
Remove_client(client, method.ToString(), e);
}
}
else
Remove_client(client, method.ToString());
}
}
}
僞代碼:
void EventHandler_A() {
// Call Fish method on all clients:
CallBackClients(Fish("hello"));
}
void EventHandler_B() {
// Call SuperFish method on all clients:
CallBackClients(SuperFish(10, 5.3);
}
如果回調方法返回某事,這是行不通的。但這可能不是問題。 – svick
在這種情況下,'CallBackClients'方法可以在'T'中通用,並且可以將委託改爲'Func',並以適當的方式傳遞返回值。 –
thecoop
回調都是無效/單向 - 所以那裏好。 – Ricibob