class Program
{
static IEnumerable<site> list = Enumerable.Range(1, 10).Select(i => new site(i.ToString()));
static void Main(string[] args)
{
startup();
Console.ReadKey();
}
static public void startup()
{
router.cts = new CancellationTokenSource();
foreach (var s in list)
{
update(s);
}
}
async static public void update(site s)
{
try
{
while (true)
{
await s.Refresh();
if (site.count % 4 == 0)
{
Console.WriteLine("Reseting Queue");
router.cts.Cancel();
}
}
}
catch (OperationCanceledException)
{
Console.WriteLine("Canceled");
startup();
}
}
}
class router
{
public static SemaphoreSlim ss = new SemaphoreSlim(1);
public static CancellationTokenSource cts { get; set; }
}
class site
{
public static int count = 0;
public string sitename {get; set;}
public site(string s)
{
sitename = s;
}
async public Task Refresh()
{
await router.ss.WaitAsync(router.cts.Token);
//Console.WriteLine("{0}:: Start Refreshing ", sitename);
await Task.Delay(1000);
Console.WriteLine("{0}:: Done Refreshing ", sitename);
count++;
router.ss.Release();
}
}
Tôi đang cố mô phỏng một mẫu khởi chạy vòng lặp vô hạn mô phỏng cập nhật liên tục của trang web. Tôi bắt chước điều này với mô đun. Về lý thuyết tôi muốn điều này để hủy bỏ tất cả các nhiệm vụ xếp hàng theo semaphore và khởi động lại hàng đợi từ đầu nhưng nó dường như không làm điều đó. Ai đó có thể xin vui lòng bình luận về logic và mô hình của tôi?SemaphoreChuyển đổi mã hủy dịch vụ
đầu ra ngay bây giờ trông như thế này ::
1:: Done Refreshing
2:: Done Refreshing
3:: Done Refreshing
4:: Done Refreshing
Reseting Queue
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
5:: Done Refreshing
1:: Done Refreshing
2:: Done Refreshing
3:: Done Refreshing
Reseting Queue
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
4:: Done Refreshing
5:: Done Refreshing
6:: Done Refreshing
7:: Done Refreshing
Reseting Queue
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
Canceled
8:: Done Refreshing
9:: Done Refreshing
10:: Done Refreshing
1:: Done Refreshing
Reseting Queue
Canceled
Bạn có muốn các trang web được cập nhật song song hoặc từng trang một không? – i3arnon
Tôi muốn họ cập nhật song song nhưng semaphore là để mô phỏng một mã mà cần phải có một khóa trên đó. – cubesnyc
@YevgenyYurgenson, đây có phải là câu hỏi tiếp theo cho [câu hỏi trước của bạn] (http://stackoverflow.com/q/24020740/1768303) không? Điểm có 'SemaphoreSlim (1) 'là gì? Bạn không muốn có nhiều hơn 1 hoạt động cùng một lúc? – Noseratio