基本的にはい。
あなたの質問から、どれが必ずしも正しいとは限らないと考えているかがTask
わかりsomething executed in separate thread
ました。Asycメカニズムはそれよりも一般的であり、スレッドが1つとして終了する、Webリクエストが値を返す、ファイルシステムがファイルを読み取る、その他必要なことを待機している間、その間に何かを行うことができます。これは、次のようなパターンに煩わされないようにするための凝った構文糖衣に他なりません。
void DoSomethingTimeConsumingThatWillNotBlockThisThread(Action onFinishContinue);
次の簡単なプログラムを検討してください。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
GetPoint();
}
public async void GetPoint()
{
var point = await RetrivePointAsync();
MessageBox.Show(point.ToString());
}
public Task<Point> RetrivePointAsync()
{
return Task.Factory.FromAsync<Point>(
(callback, state) => new Handler(this, callback),
x => ((Handler)x).Point, null);
}
}
私がイベントに添付した私の主張を証明するために、ユーザーがクリックするのを待っているので、スレッドは関係ありません。
class Handler : IAsyncResult
{
AsyncCallback _calback;
public Point Point { get; set; }
public object AsyncState { get { return null; } }
public bool CompletedSynchronously { get { return false; } }
public bool IsCompleted { get; set; }
public WaitHandle AsyncWaitHandle { get { return null; } }
public Handler(Control control, AsyncCallback calback)
{
_calback = calback;
control.MouseDown += control_MouseDown;
}
void control_MouseDown(object sender, MouseEventArgs e)
{
Point = e.Location;
IsCompleted = true;
_calback(this);
}
}