| 

.NET C# Java Javascript Exception

4
Wenn ich in einem WebClient mehrere Anfragen an einen Webserver asynchron rausschicke, wie weiß ich dann, welche der Anfragen zurückkommt? Die zuerst ausgesendete muss ja nicht die sein, die als erstes vom Server zurückkommt.
News:
22.02.2011
Hubert 43 4
4 Antworten
2
Bibliotheken für .NET, die asynchrone Funktionen anbieten, halten sich oft an das Pattern für asnychrone Aufrufe, das Microsoft vorschlägt und auch selbst umsetzt.

Wichtig hier: Du kannst beim Aufruf ein beliebiges Objekt mitgeben (Standard-Name: userState), das Du dann im Callback wieder mit übergeben bekommst und über das Du Aufruf und Antwort einander zuordnen kannst. Ein Beispiel, aufbauend auf Andys Vorschlag:

servicesoapClient.SendFeedbackCompleted += ((sender, e) =>
{
if (e.Error != null)
MessageBox.Show(
"Could not send feedback. Please try again.",
"Error", MessageBoxButton.OK);
else
MessageBox.Show("Thank you for your feedback no. " + e.UserState);
});

servicesoapClient.SendFeedbackAsync(message, 1);
servicesoapClient.SendFeedbackAsync(message, 2);
servicesoapClient.SendFeedbackAsync(message, 3);
22.02.2011
Matthias Hlawatsch 13,2k 4 9
cool. Genau das hat mir gefehlt. Danke.
Hubert 22.02.2011
1
Relativ simpler Ansatz: Du gibst eine eindeutige ID (GUID?) beim Request mit, die der Server beim Response einfach wieder mit zurückschickt. Auf die Art weißt Du, welcher Response zu welchem Request gehört.
22.02.2011
Golo Roden 2,7k 3 9
0
So we have been trying out to hack someones snapchat account online and in a minute we can have the generator from here for the password. So if you want to get the password that you are missing for the snapchat account is here.
24.07.2017
-1
Das stimmt, die zuerst ausgesendete muss auch nicht zuerst als Antwort zurückkommen.
Vielleicht kannst du deine Frage etwas genauer auf eine Technologie formulieren?

In C# hast du die Möglichkeit, mit einem Ereignishandler auf Antworten zu reagieren:
servicesoapClient.SendFeedbackAsync(message);
servicesoapClient.SendFeedbackCompleted += ((sender, e) =>
{
if (e.Error != null)
MessageBox.Show(
"Could not send feedback. Please try again.",
"Error", MessageBoxButton.OK);
else
MessageBox.Show("Thank you for your feedback!");
});


Hilft dir das weiter?
22.02.2011
Andy Stumpp 509 1 6
-1: der Completed-Handler sollte vor dem ersten Aufruf registriert werden - wer weiß denn schon, wer schneller ist? Vor allem aber: der Code liefert noch keine Antwort auf die Frage, wie zwei verschiedene Aufrufe im Completed-Handler zu unterscheiden sind.
Matthias Hlawatsch 22.02.2011
Hast Recht, war keine Absicht.
Andy Stumpp 22.02.2011

Stelle deine Asynchron-Frage jetzt!