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();
}
}
मैं एक ऐसे पैटर्न की नकल करने की कोशिश कर रहा हूं जो अनन्त लॉन्च करता है जबकि लूप जो साइट के निरंतर अद्यतन को अनुकरण करता है। मैं मॉड्यूलस के साथ नकल कर रहा हूँ। सिद्धांत रूप में मैं इसे सैमफोर द्वारा कतारबद्ध सभी कार्यों को रद्द करना चाहता हूं और शुरुआत से कतार को पुनरारंभ करना चाहता हूं लेकिन ऐसा लगता है कि ऐसा नहीं लगता है। क्या कोई मेरे तर्क और पैटर्न पर टिप्पणी कर सकता है?सेमफोरस्लिम रद्दीकरण टोकन
उत्पादन अभी इस ::
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
क्या आप साइट को समानांतर में या एक-एक करके अपडेट करना चाहते हैं? – i3arnon
मैं चाहता हूं कि वे समानांतर में अपडेट करें लेकिन सेमफोर उस कोड को अनुकरण करना है जिस पर लॉक होना आवश्यक है। – cubesnyc
@YevgenyYurgenson, क्या यह आपके [पिछले प्रश्न] (http://stackoverflow.com/q/24020740/1768303) का अनुवर्ती है? 'सेमफोरस्लिम (1)' होने का क्या मतलब है? क्या आप एक ही समय में 1 से अधिक ऑपरेशन नहीं करना चाहते हैं? – Noseratio