async Task<int> MakeAsyncTask_Plus(int aArg1, int aArg2, int aDurationMs) { // await Task.Delay(aDurationMs); return aArg1 + aArg2; } async Task<int> MakeAsyncTask_Mult(int aArg1, int aArg2, int aDurationMs) { // await Task.Delay(aDurationMs); return aArg1 * aArg2; }
async void CalcAsync() { Task<int> aPlus1 = MakeAsyncTask_Plus(1, 2, 2000); // 1 Task<int> aPlus2 = MakeAsyncTask_Plus(3, 4, 2000); // 2 int aArg1 = await aPlus1; // 3 int aArg2 = await aPlus2; // 4 Task<int> aMult = MakeAsyncTask_Mult(aArg1, aArg2, 1000); // 5 int aRes = await aMult; // 6 Log(string.Format("{0} * {1} = {2}", aArg1, aArg2, aRes)); }
procedure TCalcAsync.Execute; var aPlus1: TAsyncTask<Integer>; aPlus2: TAsyncTask<Integer>; aMult: TAsyncTask<Integer>; aArg1, aArg2: Integer; aRes: Integer; begin aPlus1 := nil; aPlus2 := nil; aMult := nil; try aPlus1 := TAsyncTask_Plus.Create(Self, 1,{+}2, 2000{ms}); aPlus2 := TAsyncTask_Plus.Create(Self, 3,{+}4, 2000{ms}); aArg1 := aPlus1.Await; aArg2 := aPlus2.Await; aMult := TAsyncTask_Mult.Create(Self, aArg1,{*}aArg2, 1000{ms}); aRes := aMult.Await; Example.Log('%d * %d = %d', [aArg1, aArg2, aRes]); finally aMult.Free; aPlus2.Free; aPlus1.Free; end; end;
Source: https://habr.com/ru/post/278985/
All Articles