Получение данных из асинхронных методов WCF внутри цикла foreach
-
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;
}
Не связан с StackOverflow