Tout d'abord, vous ne pouvez pas avoir fait de multiples activités Asynchronous en circulation à la même instance d'un WebClient. Donc, je suppose pour le moment que vous créez plusieurs instances de WebClient et que vous attribuez la même fonction aux événements de ces instances WebClient.
De manière simpliste, vous pouvez corréler l'instance WebClient utilisée pour générer la requête en renvoyant le paramètre sender
de l'événement à WebClient
.
De plus toutes les méthodes asynchrones (sur WebClient ou sur les WebRequest sous-jacents, types WebResponse) ont une surcharge qui prend un object
userToken. Ce userToken est le passé dans tout événement ultérieur qui survient à la suite de l'appel. Vous pouvez passer n'importe quel objet que vous aimez dans le paramètre. Par conséquent, si vous avez une autre instance d'un objet ou une valeur d'ID que vous souhaitez utiliser pour co-relier cet appel, vous pouvez utiliser ce paramètre.
WebClient wc = new WebClient();
wc.DownloadStringCompleted += Handle_DownloadStringCompleted;
wc.DownloadString(myUri, myUri);
...
void Handle_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (!e.Canceled)
{
Uri originalUri = (Uri)e.UserState;
// Do stuff with the Uri.
}
}