নেট .৪.৪ নিয়ে কাজ করা সহজ বলে আমি ভেবেছিলাম এমন কিছু পাওয়ার জন্য আমি কিছুক্ষণ চেষ্টা করছি
আমি একই সাথে দীর্ঘ দুটি চলমান কাজ বন্ধ করতে
এবং সেরা সি # 4.5 (আরটিএম) উপায়ে ফলাফল সংগ্রহ করতে চাই
নিম্নলিখিতটি কাজ করে তবে আমি এটি পছন্দ করি না কারণ:
- আমি
Sleepএকটি অ্যাসিঙ্ক পদ্ধতি হতে চাই যাতে এটিawaitঅন্যান্য পদ্ধতিগুলিও করতে পারে - এটি দেখতে কেবল আনাড়ি দেখায়
Task.Run() - আমি মনে করি না যে এটি কোনও নতুন ভাষার বৈশিষ্ট্যগুলিও ব্যবহার করছে!
কাজের কোড:
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Task.Run(() => Sleep(5000));
var task2 = Task.Run(() => Sleep(3000));
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for a total of " + totalSlept + " ms");
}
private static int Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
Console.WriteLine("Sleeping for " + ms + " FINISHED");
return ms;
}
অ-কার্যকারী কোড:
আপডেট: এটি আসলে কাজ করে এবং এটি করার সঠিক উপায়, একমাত্র সমস্যা Thread.Sleep
এই কোডটি কাজ করে না কারণ কলটি Sleep(5000)তাৎক্ষণিকভাবে টাস্কটি শুরু করে তাই Sleep(1000)এটি শেষ না হওয়া পর্যন্ত চলবে না। এই যদিও সত্য Sleepহয় asyncএবং আমি ব্যবহার করছি না awaitবা কলিং .Resultখুব শীঘ্রই।
আমি ভেবেছিলাম সম্ভবত Task<T>কোনও asyncপদ্ধতিতে কল করে অ-রান করার উপায় আছে যাতে আমি তখন Start()দুটি কাজ করতে পারি তবে আমি কীভাবে Task<T>একটি অ্যাসিঙ্ক পদ্ধতিটি কল করতে পারি তা বুঝতে পারি না ।
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Sleep(5000); // blocks
var task2 = Sleep(1000);
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for " + totalSlept + " ms");
}
private static async Task<int> Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
return ms;
}
task1.Resultনা ঘটছে ঘটছেvar task1 = Sleep(5000) কারণ অপেক্ষার কীওয়ার্ড ছাড়াই আপনার ঘুমের পদ্ধতিটি সিঙ্ক্রোনাস।