Использовать модель асинхронного программирования, которая позволяет выполнять некоторую часть кода в отдельных потоках.
Существует три стиля программирования с использованием APM
Wait Пока DoneМодель
Модель опроса
Модель обратного вызова
В зависимости от ваших требований и результатов вы можете выбратьмодель, которая является более подходящей.
Например, допустим, вы можете прочитать файл и подождать, пока все будет готово, и пример кода будет
byte[] buffer = new byte[100];
string filename =
string.Concat(Environment.SystemDirectory, "\\mfc71.pdb");
FileStream strm = new FileStream(filename,
FileMode.Open, FileAccess.Read, FileShare.Read, 1024,
FileOptions.Asynchronous);
// Make the asynchronous call
strm.Read(buffer, 0, buffer.Length);
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);
// Do some work here while you wait
// Calling EndRead will block until the Async work is complete
int numBytes = strm.EndRead(result);
// Don't forget to close the stream
strm.Close();
Console.WriteLine("Read {0} Bytes", numBytes);
Console.WriteLine(BitConverter.ToString(buffer));
Но создавать ваши потоки не нужно илиПредполагается, что .NET поддерживает встроенный пул потоков, который может использоваться во многих ситуациях, когда вы собираетесь создавать свои собственные потоки.Пример кода
static void WorkWithParameter(object o)
{
string info = (string) o;
for (int x = 0; x < 10; ++x)
{
Console.WriteLine("{0}: {1}", info,
Thread.CurrentThread.ManagedThreadId);
// Slow down thread and let other threads work
Thread.Sleep(10);
}
}
Вместо того, чтобы создавать новый поток и управлять им, мы используем ThreadPool для этой работы, используя его метод QueueWorkItem
WaitCallback workItem = new WaitCallback(WorkWithParameter));
if (!ThreadPool.QueueUserWorkItem(workItem, "ThreadPooled"))
{
Console.WriteLine("Could not queue item");
}