「重たい処理を非同期で実行して、結果をメインスレッドで画面に表示」を、
で比較。
@Override
public void onClick(View view) {
new AsyncTask<Void, Void, Long>() {
@Override
protected Long doInBackground(Void[] p) {
// ワーカースレッド
long ret = 0;
for (long i = 0; i < 1000000000; i++)
ret += i;
return ret;
}
@Override
protected void onPostExecute(Long result) {
// UIスレッド
text1.setText(String.valueOf(result));
}
}.execute((Void)null);
}
@IBAction func onTouchUpInside(sender: AnyObject) {
weak var weakSelf = self
dispatch_async(dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
// ワーカースレッド
var ret:Int = 0
for i in 0...1000000000 {
ret += i
}
dispatch_async(dispatch_get_main_queue(), {
// UIスレッド
weakSelf?.label1.text = String(ret)
});
});
}
Task<long> FatProc() => Task.Run<long>(() => {
long ret = 0;
for (long i = 0; i < 1000000000; i++)
ret += i;
return ret;
});
button1.TouchUpInside += async (_, e) => {
var ret = await FatProc(); // ワーカースレッド
label1.Text = ret.ToString(); // UIスレッド
};