C#学習中のため、学習内容をメモしていく。
間違いやアドバイスがあればコメントからよろしくお願いします。
Task処理
Task処理に関して少し勘違いしていたのでメモ
void TaskSample()
{
Task.Run(() =>
{
HeavyMethod();
});
Console.WriteLine("おはよう");
}
void HeavyMethod()
{
// 重い処理
Thread.Sleep(1000);
Console.WriteLine("こんばんは");
}
おはよう
こんばんは
別メソッドで非同期に動く処理はTask.Runで囲まれたHeavyMethodメソッドのみ。「おはよう」表示処理はHeavyMethodメソッド後に実行されると勘違いしていた。
「おはよう」表示を「こんばんは」より後にしたい場合は、HeavyMethodメソッドの終了を待つようにする。
async Task TaskSample()
{
await Task.Run(() =>
{
HeavyMethod();
});
Console.WriteLine("おはよう");
}
void HeavyMethod()
{
// 重い処理
Thread.Sleep(1000);
Console.WriteLine("こんばんは");
}
こんばんは
おはよう
HeavyMethodメソッドの戻り値を受け取りたいときはこうする。
async Task TaskSample()
{
string str = await Task.Run(() => HeavyMethod());
Console.WriteLine(str);
}
string HeavyMethod()
{
// 重い処理
Thread.Sleep(1000);
Console.WriteLine("こんばんは");
return "こんにちは";
}
こんばんは
こんにちは
string str = await Task.Run(() => { HeavyMethod(); });
{}をいれいると「型voidをstringに暗黙的に変換できません」とエラーになる。
参考した記事
おわり。