em_developer
دوشنبه 20 آذر 1391, 01:17 صبح
چند نخی تکنیکی است که برای اجرای همروند چند عمل استفاده می شود
یکی از تکنیک های استفاده از چند نخی ایجاد یک delegate از یک متد است، در زیر نمونه کدی در این باره آمده است، این نمونه کد در کنسول است:
class Program
{
public delegate int TakeAWhileDelegate(int data, int ms);
static void Main(string[] args)
{
// synchronous method call
// TakesAWhile(1, 3000);
// asynchronous by using a delegate
TakeAWhileDelegate d1 = TakesAWhile;
IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
while (!ar.IsCompleted)
{
// doing something else in the main thread
Console.Write(".");
Thread.Sleep(100);
}
int result = d1.EndInvoke(ar);
Console.WriteLine("result: {0}",result);
Console.Read();
}
static int TakesAWhile(int data, int ms)
{
Console.WriteLine("TakesAWhile started");
Thread.Sleep(ms);
Console.WriteLine("TakesAWhile completed");
return ++data;
}
}
در کد با استفاده از اینترفیس IAsyncResult و استفاده از متد BeginInvoke در حین اجرا شدن یک نخ با استفاده از نخ اصلی برنامه هر بار یک نقطه در کنسول چاپ می کند و با استفاده از متد استاتیک کلاس Sleep نخ جاری که همان نخ اصلی است را به حالت معلق در می آورد.
در این کد به خوبی مفهوم انجام دو کار مختلف با هم با استفاده از نخ نشان داده شده است.
برای توضیحات کامل تر به کتاب
Wrox Professional C# 2008 Published byWiley Publishing, Inc
به Chapter 19: Threading and Synchronization مراجعه کنید.
یکی از تکنیک های استفاده از چند نخی ایجاد یک delegate از یک متد است، در زیر نمونه کدی در این باره آمده است، این نمونه کد در کنسول است:
class Program
{
public delegate int TakeAWhileDelegate(int data, int ms);
static void Main(string[] args)
{
// synchronous method call
// TakesAWhile(1, 3000);
// asynchronous by using a delegate
TakeAWhileDelegate d1 = TakesAWhile;
IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
while (!ar.IsCompleted)
{
// doing something else in the main thread
Console.Write(".");
Thread.Sleep(100);
}
int result = d1.EndInvoke(ar);
Console.WriteLine("result: {0}",result);
Console.Read();
}
static int TakesAWhile(int data, int ms)
{
Console.WriteLine("TakesAWhile started");
Thread.Sleep(ms);
Console.WriteLine("TakesAWhile completed");
return ++data;
}
}
در کد با استفاده از اینترفیس IAsyncResult و استفاده از متد BeginInvoke در حین اجرا شدن یک نخ با استفاده از نخ اصلی برنامه هر بار یک نقطه در کنسول چاپ می کند و با استفاده از متد استاتیک کلاس Sleep نخ جاری که همان نخ اصلی است را به حالت معلق در می آورد.
در این کد به خوبی مفهوم انجام دو کار مختلف با هم با استفاده از نخ نشان داده شده است.
برای توضیحات کامل تر به کتاب
Wrox Professional C# 2008 Published byWiley Publishing, Inc
به Chapter 19: Threading and Synchronization مراجعه کنید.