diff --git a/src/Core/CoreLib/Threading/Task.cs b/src/Core/CoreLib/Threading/Task.cs index 14e0080e7..2ab3bce7f 100644 --- a/src/Core/CoreLib/Threading/Task.cs +++ b/src/Core/CoreLib/Threading/Task.cs @@ -50,6 +50,10 @@ public static Task Any(int timeout, params Task[] tasks) { return null; } + public Task ChangeWith(Func continuation) { + return null; + } + public Task ContinueWith(Action continuation) { return null; } @@ -85,6 +89,10 @@ public T Result { } } + public Task ChangeWith(Func, TResult> continuation) { + return null; + } + public Task ContinueWith(Action> continuation) { return null; } diff --git a/src/Core/Scripts/Runtime/Task.js b/src/Core/Scripts/Runtime/Task.js index c308d00d6..066c34b67 100644 --- a/src/Core/Scripts/Runtime/Task.js +++ b/src/Core/Scripts/Runtime/Task.js @@ -1,7 +1,7 @@ // Task function Task(result) { - this._continuations = isValue(result) ? + this._continuations = result !== undefined ? (this.status = 'done', null) : (this.status = 'pending', []); this.result = result; @@ -11,6 +11,23 @@ var Task$ = { get_completed: function() { return this.status != 'pending'; }, + changeWith: function(continuation) { + var task = new Task(); + this.continueWith(function(t) { + var error = t.error; + var result; + if (!error) { + try { + result = continuation(t); + } + catch (e) { + error = e; + } + } + _updateTask(task, result, error); + }); + return task; + }, continueWith: function(continuation) { if (this._continuations) { this._continuations.push(continuation); diff --git a/tests/TestCases/Basic/Metadata/Baseline.txt b/tests/TestCases/Basic/Metadata/Baseline.txt index 4e7a523b0..dac4adc20 100644 --- a/tests/TestCases/Basic/Metadata/Baseline.txt +++ b/tests/TestCases/Basic/Metadata/Baseline.txt @@ -3669,6 +3669,11 @@ Types: Visibility: Public, Static Generated Name: any Abstract: False + Method: ChangeWith + AssociatedType: Task`1 + Visibility: Public + Generated Name: changeWith + Abstract: False Method: ContinueWith AssociatedType: Task Visibility: Public @@ -3706,6 +3711,11 @@ Types: AssociatedType: T Visibility: Public Generated Name: result + Method: ChangeWith + AssociatedType: Task`1 + Visibility: Public + Generated Name: changeWith + Abstract: False Method: ContinueWith AssociatedType: Task`1 Visibility: Public