C# дросселирование для цикла
Исходная ситуация
Я занимаюсь разработкой.NET Framework 4.0, C#, Winform Application. Приложение перечислит (и протестирует) операции WebServiceOperations в GridView (в настоящее время 60 DataRows => WebServiceOperations).
Задача
Я должен проверить / вызвать все эти операции одним нажатием на кнопку. Каждая операция создает новый экземпляр класса. В этом классе я вызываю асинхронную операцию WebServiceOperation и жду результата. Результат затем подтверждается. Весь код работает гладко, используя делегаты и события.
Теперь дело доходит до проблемы / вопроса: при нажатии на эту кнопку я использую цикл for (int i = 0; i
связи
пример кода действительно поможет!
--- это мое решение / пример кода ---
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;
using System.Threading;
namespace ConcurrentQueueSample
{
class Program
{
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(3);
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Interval = 1234;
timer.Enabled = true;
timer.Start();
for (int i = 0; i < 10; i++) new Thread(go).Start(i);
}
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
semaphoreSlim.Release();
}
static void go(object i)
{
Console.WriteLine("id: {0}", i);
semaphoreSlim.Wait();
Console.WriteLine("id: {0} is in", i);
Thread.Sleep(1250);
Console.WriteLine("id: {0} left!", i);
}
}
}
1 ответ
Возможно, вы захотите взглянуть на использование класса SemaphoreSlim для регулирования потоков, имеющих доступ к вашей очереди.