Skip to content

Commit

Permalink
Fixed bug in Task implementation
Browse files Browse the repository at this point in the history
Add ability to write a task continuation that changes the task result
  • Loading branch information
nikhilk committed Jun 4, 2013
1 parent 8b97f3f commit 283e79d
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/Core/CoreLib/Threading/Task.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public static Task<Task> Any(int timeout, params Task[] tasks) {
return null;
}

public Task<TResult> ChangeWith<TResult>(Func<Task, TResult> continuation) {
return null;
}

public Task ContinueWith(Action<Task> continuation) {
return null;
}
Expand Down Expand Up @@ -85,6 +89,10 @@ public T Result {
}
}

public Task<TResult> ChangeWith<TResult>(Func<Task<T>, TResult> continuation) {
return null;
}

public Task<T> ContinueWith(Action<Task<T>> continuation) {
return null;
}
Expand Down
19 changes: 18 additions & 1 deletion src/Core/Scripts/Runtime/Task.js
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions tests/TestCases/Basic/Metadata/Baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 283e79d

Please sign in to comment.