নেট .৪.৪ নিয়ে কাজ করা সহজ বলে আমি ভেবেছিলাম এমন কিছু পাওয়ার জন্য আমি কিছুক্ষণ চেষ্টা করছি
আমি একই সাথে দীর্ঘ দুটি চলমান কাজ বন্ধ করতে
এবং সেরা সি # 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)
কারণ অপেক্ষার কীওয়ার্ড ছাড়াই আপনার ঘুমের পদ্ধতিটি সিঙ্ক্রোনাস।