AsyncCallback получает значения через ссылочную переменную - PullRequest
2 голосов
/ 05 июля 2011

Мне нужно вызвать функцию с использованием асинхронных делегатов, когда я прохожу учебник по AsyncCallback, я увидел асинхронный обратный вызов, определенный ниже:

static void CallbackMethod(IAsyncResult result)
{
   // get the delegate that was used to call that
   // method
   CacheFlusher flusher = (CacheFlusher) result.AsyncState;

   // get the return value from that method call
   int returnValue = flusher.EndInvoke(result);

   Console.WriteLine("The result was " + returnValue);
}       

Пожалуйста, дайте мне знать, если я могу получитьвозвращаемое значение в качестве ссылки из функции.Например: = моя функция имеет формат

void GetName(int id,ref string Name);

Здесь я получаю вывод из функции через переменную ссылки.Если я вызываю эту функцию с помощью асинхронных делегатов, как я могу прочитать вывод функции обратного вызова?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Вам нужно заключить свои аргументы в объект:

class User
{
    public int Id { get; set; }

    public string Name { get; set; }
}

void GetName(IAsyncResult result)
{
    var user = (User)result.AsyncState
    // ...
}

AsyncCallback callBack = new AsyncCallback(GetName);
0 голосов
/ 05 июля 2011

Не передавать возвращаемое значение обратно с помощью параметра ref. Вместо этого измените подпись на:

string GetName(int id)

или, возможно:

string GetName(int id, string defaultName) // Or whatever

Обратите внимание, что существует большая разница между "ссылкой" и "передачей по ссылке". Важно понимать разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...