مشاركة عبر


تجمع مؤشر ترابط (C# و Visual Basic)

تجمع عمليات جزئية عبارة عن مجموعة من عمليات جزئية التي يمكن إستخدامها لإجراء العديد من المهام في الخلفية. (راجع التأشير الترابطي ل Visual Basic و #Visual Cللحصول على معلومات الخلفية.) و هذا يترك مؤشر الترابط الأساسي حر لتنفيذ مهام أخرى بشكل غير متزامن.

يتم غالباً بإستخدام تجمعات مؤشر ترابط في تطبيقات الخادم. يتم تعيين كل طلب وارد إلى مؤشر ترابط من تجمع مؤشرات الترابط بحيث يمكن معالجة الطلب بشكل غير متزامن ، دون تعطيل مؤشر الترابط الرئيسي أو تأخير معالجة الطلبات اللاحقة.

بمجرد اكتمال مهمة مؤشر الترابط في التجمع فإنه يتم إرجاعها إلى قائمة الانتظار لمؤشرات الترابط حيث يتم إعادة إستخدامها. هذه الإعادة للإستخدام تمكن التطبيقات من تجنب تكلفة إنشاء مؤشر ترابط جديد لكل مهمة.

عادةً ما تحتوي تجمعات مؤشر ترابط أقصى عدد من عمليات جزئية. إذا كانت كل العمليات الجزئية مشغولة, يتم وضع المهام الإضافية في قائمة الانتظار حتى يمكن أن تتم خدمتها مع توفر العمليات الجزئية.

يمكنك تنفيذ تجمع مؤشرات الترابط الخاصة بك لكن يفضل إستخدام تجمع مؤشرات الترابط الموفر من قبل برنامج .NET Framework خلال فئة ThreadPool.

عند تجمع مؤشر ترابط تستدعي ThreadPool.QueueUserWorkItem لمفوض الإجراء الذي تريد تشغيله، ثم Visual Basicأو C# بإنشاء مؤشر ترابط ويتم تشغيل الإجراء.

مثال تجمع مؤشر ترابط

يظهر المثال التالي كيف يمكنك إستخدام تجمع مؤشر الترابط لبدأ العديد من المهام.

Public Sub DoWork()
    ' Queue a task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        New System.Threading.WaitCallback(AddressOf SomeLongTask))
    ' Queue another task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        New System.Threading.WaitCallback(AddressOf AnotherLongTask))
End Sub
Private Sub SomeLongTask(ByVal state As Object)
    ' Insert code to perform a long task.
End Sub
Private Sub AnotherLongTask(ByVal state As Object)
    ' Insert code to perform another long task.
End Sub
public void DoWork()
{
    // Queue a task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        new System.Threading.WaitCallback(SomeLongTask));
    // Queue another task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        new System.Threading.WaitCallback(AnotherLongTask));
}

private void SomeLongTask(Object state)
{
    // Insert code to perform a long task.
}

private void AnotherLongTask(Object state)
{
    // Insert code to perform a long task.
}

من مزايا تجمع مؤشر الترابط أنه يمكنك تمرير الوسيطات في كائن الالولاية لإجراء مهمة. إذا تطلب الإجراء الذي تقوم بطلبه أكثر من وسيطة, يمكن تحويل بنية أو مثيل من فئة في عنصر نوع البيانات Object.

معلمات تجمع مؤشر ترابط و قيم الإرجاع

إرجاع القيم من مؤشر ترابط تجمع مؤشرات ترابط غير مباشرة. الطريقة القياسية لإرجاع قيم من استدعاء دالة غير مسموح به لأن إجراءاتSub هي النوع الوحيد من الإجراء الذي يمكن أن يكون بقائمة الانتظارلتجمع مؤشر ترابط. هناك طريقة أخرى لتوفير معلمات قيم الإرجاع وهي التفاف المعلمات و قيم الإرجاع و الأساليب في فئة برنامج تضمين كما هو موضح في معلمات وقيم إرجاع الإجراءات متعددة مؤشرات الترابط (C# و Visual Basic).

هناك طريقة أسهل لتوفير معلمات و قيم العودة وهو بإستخدام متغير الكائن الحالة ByVal الاختياري من الأسلوب QueueUserWorkItem. إذا إستخدمت هذا المتغير لتمرير مرجع إلى مثيل من فئة, يمكن لأعضاء المثيل أن تعدل من قبل مؤشر ترابط تجمع مؤشرات الترابط وإستخدامها كقيم إرجاع.

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

لا يمكن إستخدام بنيات لإرجاع قيم داخل كائنات الحالة. لأن البنيات تعد من أنواع القيمة ، لا تقم بتغيير التغييرات يجعل العملية غير متزامنة الأعضاء من البنية الأصلية. إستخدام بنيات لتقديم معلمات عندما تكون القيم المرجعه غير ضرورية.

راجع أيضًا:

المهام

كيفية القيام بما يلي: استخدم تجمع مؤشر ترابط (C# و Visual Basic)

المرجع

التأشير الترابطي ل Visual Basic و #Visual C

مؤشر ترابط تجمع (C# و Visual Basic)

QueueUserWorkItem

System.Threading

ThreadPool

المبادئ

تطبيقات ذات مؤشرات ترابط (C# و Visual Basic)

موارد أخرى

كيفية: إرسال عنصر عمل إلى مجمع مؤشر الترابط بإستخدام ‏‫#Visual C