Получение данных из асинхронных методов WCF внутри цикла foreach

StackOverflow https://stackoverflow.com/questions/627649

  •  06-07-2019
  •  | 
  •  

Вопрос

В приведенном ниже коде у меня есть объект List. Я хочу перебрать каждый из них и назначить значение одному из свойств каждого объекта Item. Чтобы получить значение, мне нужно вызвать асинхронный метод службы WCF.

Когда вызов к моей службе WCF завершится, как мне взять эти данные и назначить их текущему экземпляру (i) в itemsList? Есть ли способ получить доступ к i из моего события xxxCompleted?

private void SomeMethod()
{
    List<Item> itemsList = GetItems();

    foreach(Item i in itemsList)
    {  
      MyClient client = new MyClient();
      client.GetSomeValueCompleted += client_GetSomeValueCompleted;
      client.GetSomeValueAsync(i.ID);
    } 
}   

private void client_GetSomeValueCompleted(object sender, GetSomeValueEventArgs e)
{
  int id = e.Result;
  //  how do I assign this ID to my itemsList object, i  ???
}
Это было полезно?

Решение

Вы можете передать экземпляр класса MyClient как пользовательское состояние при вызове асинхронного метода.

Взгляните на это rel = "nofollow noreferrer"> ссылка


private void SomeMethod()
{    
   List itemsList = GetItems();    
   foreach(Item i in itemsList)    
   {        
      MyClient client = new MyClient();      
      client.GetSomeValueCompleted += client_GetSomeValueCompleted;      
      client.GetSomeValueAsync(i.ID, client);
   } 
}   

private void client_GetSomeValueCompleted(object sender, GetSomeValueEventArgs e)
{  
   int id = e.Result;  

   //  how do I assign this ID to my itemsList object, i  ???
   (e.UserState as MyClient).ID = id;
}


Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top