سؤال

وأود أن أعرف كيف يتم التعامل مع المواضيع على جانب الملقم باستخدام كائنات MarshalByRef.

ونظرا بلدي إبعاد الطبقة MarshalByRef:

public class MyRemotedClass : MarshalByRef
{
  public int MyInt;
  public string MyString;
}

وكود العميل (مترابطة واحد):

MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1
m.MyString = "Hello World"; // Write operation 2

وعلى جانب الملقم، لدينا عمليات الكتابة اثنين. وأفترض أن موضوع هو من ThreadPool. ومع ذلك، لأن الطبقة هي MarshalByRef، سواء opeations هي دعوات منفصلة الإجراء البعيد. هم ذاهبون لتشغيل على موضوع منفصل؟ إذا كان الجواب نعم، يمكن أن تحدث تلك العملية 2 سوف يتم تنفيذها قبل عملية 1 التشطيبات؟

وPS: جعل MyRemotedClass MarshalByRef هو قرار سيء. ولكن أنا لا يسمح لتغيير ذلك، لذا يرجى لا أقترح ذلك.

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

المحلول

وأنا لست خبيرا في هذا الشأن، ولكن كنت حقا <م> نتوقع الكتابة إلى MyInt قد أنجزت بشكل موثوق قبل يحاول حالة العميل الكتابة إلى MyString إلا إذا كنت قد حصلت على بعض غير المتزامن غير تقليدي السلوك يحدث.

وبعد كل شيء، إذا فشل مهمة لسبب ما السبيل المعقول الوحيد لمعالجة ذلك هو رمي استثناء قبل الشروع، IMO.

نصائح أخرى

والواقع، بقدر ما أود أن تفكر في ذلك، وتحديد خصائص 2 لا يحدث بشكل غير متزامن، وبالتالي فإن العميل ينتظر حتى يتم الانتهاء من RPC 1ST قبل ان تبدأ RPC 2.

وعلى أية حال، إذا لم يتم تكوين MyRemotedClass بك ككائن تنشيط الخادم المفرد، كما نضع في اعتبارنا أن كل RPC أن تفعله على MyRemotedClass، سيتم إنشاء مثيل جديد على الخادم. وهذا يعني أن الكائن بعيد أن لا يحتوي على أية دولة.

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