سؤال

كنت تافه مع سيلفرلايت TCP الاتصالات و كنت اضطر لاستخدام النظام.صافي.مآخذ.مأخذ الدرجة التي على سيلفرلايت وقت التشغيل فقط طرق غير متزامن.

كنت أتساءل ماذا يحدث إذا اثنين من المواضيع دعوة SendAsync على مأخذ توصيل سبيل المثال في وقت قصير جدا أحدهما من الآخر ؟

بلدي واحد القلق هو أن لا يكون اختلط بايت الذهاب من خلال TCP القناة.

كونها وسيلة غير متزامن أعتقد الرسالة يحصل وضعها في قائمة الانتظار من موضوع واحد dequeues لذلك لا يوجد مثل هذا سوف يحدث أشياء (اختلاط محتوى الرسالة على السلك).

ولكن أنا لست متأكدا من MSDN لا شيء في طريقة الوصف.هو أي شخص متأكد من هذا ؟

EDIT1 :لا تأمين على كائن قبل استدعاء SendAsync مثل :

lock(this._syncObj)
{
    this._socket.SendAsync(arguments);
}

لن يساعد لأن هذا serializes طلبات لإرسال البيانات ليست بيانات أرسلت بالفعل.

هل كانت مفيدة؟

المحلول

من أجل استدعاء SendAsync تحتاج أولا أن يكون دعا ConnectAsync مع مثيل SocketAsyncEventArgs.لها مثيل SocketAsyncEventArgs الذي يمثل العلاقة بين العميل والخادم.الدعوة SendAsync مع نفس مثيل SocketAsyncEventArgs التي تم استخدامها المتميز الدعوة إلى SendAsync سوف يؤدي إلى استثناء.

فمن الممكن لجعل متعددة المعلقة المكالمات SendAsync من نفس Socket كائن ولكن فقط باستخدام حالات مختلفة من SocketAsyncEventArgs.على سبيل المثال (في عالم مواز حيث أن هذا قد يكون ضروري) يمكن أن يجعل HTTP متعددة الوظائف إلى نفس الملقم في نفس الوقت ولكن على اتصالات مختلفة.هذا هو مقبول تماما وطبيعية ولا عميل ولا خادم الحصول على الخلط حول الحزمة التي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top