12,925
回編集
23行目: | 23行目: | ||
== asyncとawaitの動作 == | == asyncとawaitの動作 == | ||
タスクとは、一連の処理をひとまとまりにした単位である。<br> | |||
<code>Task</code>クラスはマルチスレッドで実行されるようになっており、連続で記述する場合は、記述した個数だけマルチスレッドで並列処理される。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public async Task MethodAsync() | public async Task MethodAsync() | ||
46行目: | 46行目: | ||
return await taskAll.ConfigureAwait(false); | return await taskAll.ConfigureAwait(false); | ||
} | |||
</syntaxhighlight> | |||
<br> | |||
<code>Task.Run</code>メソッドには、引数を渡すオーバーロードが存在しない。<br> | |||
引数を渡す場合、<code>Task</code>クラスのインスタンスの生成と同時に引数を渡して、<code>Task</code>クラスの<code>Start</code>メソッドを使用してスレッドを実行する必要がある。<br> | |||
<syntaxhighlight lang="c""> | |||
private async void MethodAsync() | |||
{ | |||
int m = 999; | |||
Task<int> task = new Task(x => | |||
{ | |||
Thread.Sleep(3000); | |||
return x * 2; | |||
}, m); | |||
task.Start(); | |||
m = 100; | |||
int result = await task; // result : 1998 | |||
Console.WriteLine($"{result}"); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |