Вопрос

У меня есть клиент WCF (С#), который взаимодействует с сервером WCF.Эти клиенты выполняют вызовы асинхронно.Мне интересно, хорошая это или плохая идея:

При вызове асинхронной операции из моего клиента WCF я присваиваю переменной asyncState объекта прокси-объект.В моей функции обратного вызова я извлекаю прокси-объект из значения AsyncState и вызываю для него .EndFunction.

Пример:

public void Login()
{
   Client client = CreateWCFProxy();
   client.BeginLogin(user, pass, OnLoginCompleted, client);
}

public void OnLoginCompleted(IAsyncResult result)
{
   Client client = result.AsyncState as Client;
   LoginResult loginResult = client.EndLogin(result);
}

Я мог бы сохранить Клиента как члена класса, но если я выполняю много одновременных асинхронных вызовов, это может усложниться.(Например, если прокси-сервер умирает, когда я делаю один асинхронный вызов, мне нужно создать новый прокси-сервер.Но мне все еще нужен старый прокси, чтобы иметь возможность вызывать .EndFunction при других невыполненных асинхронных вызовах.

Это было полезно?

Решение

Это должно работать нормально.Альтернативой является использование лямбда-выражения или анонимного делегата, чтобы вы могли использовать ту же локальную переменную в своем завершенном коде.

Пример использования лямбда-выражения

client.BeginLogin(user, pass,
    ar =>
    {
        LoginResult result = client.EndLogin(ar);
        Console.WriteLine(result);
    }, null);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top