عنوان:

‫Parallel Programming در Vb.Net


نویسنده: میثم ثوامری
تاریخ: ۱۳۹۱/۰۵/۱۹ ۱۲:۱۴
آدرس: www.dntips.ir
حقیقتا تا این لحظه تو پروژه ای استفاده نکردم ولی فکر میکنم یادگیری و استفادش ضروری باشه. ظهورش برمیگرده به .net1 با عنوان Threading. اما کار با Threading  خیلی مشکله. من که اینطوری فکر میکنم. حالا با اصلاح کلاس Threading  و آمده task خیلی بهتر شده. 
گام اول:Threading.Tasks را بعنوان namespace اضافه کنید
یک مثال: این loop در نظر بگیرید
Private Sub work()
        While True
        End While
End Sub 
میخوام برا متد بالا یک task تعریف کنم
Task.Factory.StartNew(Sub() work()) 
مثال دوم: یک لیست  تعریف میکنم و با استفاد از یک loop میخوام اجزا لیستو چاپ کنم.
Dim lst As New List(Of String) From {"meysam", ".nettips", "vahidnasirii"} 
Parallel.ForEach(lst, Sub(item) Console.WriteLine("name:{0}", item)) 
مثال سوم: میخوام از این تکنیک تو linq استفاده کنیم:
Dim no(9) As Integer
   For i As Integer = 0 To no.Length - 1
        no(i) = i
   Next
Dim result As IEnumerable(Of Double) = no.AsParallel.Select(Function(q) Math.Pow(q, 3)).OrderBy(Function(q) q)
   For Each items In result
        Console.WriteLine(items)
   Next 
موفق باشید. 

نظرات

  • مرتضی در ۱۳۹۱/۰۵/۱۹ ۱۳:۹
    سلام
    این کد از لحاظ منطقی درسته و جواب می‌ده ولی کاملا اشتباست چون sub رو بی‌دلیل نوشتی 
        Task.Factory.StartNew(Sub() work())
            'نحوه‌ی صحیح نوشتنش
    
            Task.Factory.StartNew(AddressOf work)
            '---- یا
            Task.Factory.StartNew(Sub()
                                      While True
                                      End While
                                  End Sub)
    • میثم ثوامری در ۱۳۹۱/۰۵/۱۹ ۱۹:۳۵
      AddressOf در دستور Threading که قدیمی هست استفاده میشه که عمدتا بصورت:
      Dim t As New Threading.Thread(AddressOf work)
      t.Start()
      متد Work برای این تعریف شده که مفوم کد برسونه.
      • مرتضی در ۱۳۹۱/۰۵/۱۹ ۱۹:۴۶
        سلام میثم جان اشتباه نکن
        AddressOf ربطی به Thread و یا Task نداره
        از AddressOf  برای ارجاع به Procedure  و Functionها استفاده میشه
        • میثم ثوامری در ۱۳۹۱/۰۵/۲۰ ۱:۱۲
          دوست من منظور من این نبود که AddressOf ارتباطی با Threading داره. منظور من این بود که از زمانی که من Parallel Programmimg کار کردم جایی ندیدم از AddressOf تو دستور Task یا Parallel استفاده کنن.از این دستور تو Thread یا  BackgroundWorking استفاده میشد که نسبتا تو نسخه‌های قدیمی net. هستن.