Skip to content

Commit 283e79d

Browse files
committed
Fixed bug in Task implementation
Add ability to write a task continuation that changes the task result
1 parent 8b97f3f commit 283e79d

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

src/Core/CoreLib/Threading/Task.cs

+8
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public static Task<Task> Any(int timeout, params Task[] tasks) {
5050
return null;
5151
}
5252

53+
public Task<TResult> ChangeWith<TResult>(Func<Task, TResult> continuation) {
54+
return null;
55+
}
56+
5357
public Task ContinueWith(Action<Task> continuation) {
5458
return null;
5559
}
@@ -85,6 +89,10 @@ public T Result {
8589
}
8690
}
8791

92+
public Task<TResult> ChangeWith<TResult>(Func<Task<T>, TResult> continuation) {
93+
return null;
94+
}
95+
8896
public Task<T> ContinueWith(Action<Task<T>> continuation) {
8997
return null;
9098
}

src/Core/Scripts/Runtime/Task.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Task
22

33
function Task(result) {
4-
this._continuations = isValue(result) ?
4+
this._continuations = result !== undefined ?
55
(this.status = 'done', null) :
66
(this.status = 'pending', []);
77
this.result = result;
@@ -11,6 +11,23 @@ var Task$ = {
1111
get_completed: function() {
1212
return this.status != 'pending';
1313
},
14+
changeWith: function(continuation) {
15+
var task = new Task();
16+
this.continueWith(function(t) {
17+
var error = t.error;
18+
var result;
19+
if (!error) {
20+
try {
21+
result = continuation(t);
22+
}
23+
catch (e) {
24+
error = e;
25+
}
26+
}
27+
_updateTask(task, result, error);
28+
});
29+
return task;
30+
},
1431
continueWith: function(continuation) {
1532
if (this._continuations) {
1633
this._continuations.push(continuation);

tests/TestCases/Basic/Metadata/Baseline.txt

+10
Original file line numberDiff line numberDiff line change
@@ -3669,6 +3669,11 @@ Types:
36693669
Visibility: Public, Static
36703670
Generated Name: any
36713671
Abstract: False
3672+
Method: ChangeWith
3673+
AssociatedType: Task`1
3674+
Visibility: Public
3675+
Generated Name: changeWith
3676+
Abstract: False
36723677
Method: ContinueWith
36733678
AssociatedType: Task
36743679
Visibility: Public
@@ -3706,6 +3711,11 @@ Types:
37063711
AssociatedType: T
37073712
Visibility: Public
37083713
Generated Name: result
3714+
Method: ChangeWith
3715+
AssociatedType: Task`1
3716+
Visibility: Public
3717+
Generated Name: changeWith
3718+
Abstract: False
37093719
Method: ContinueWith
37103720
AssociatedType: Task`1
37113721
Visibility: Public

0 commit comments

Comments
 (0)