Theme revealed when the jam starts.
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( DoHeavyWork ); } private void DoHeavyWork() { // CPU-bound or blocking work ExpensiveCalculation(); }
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( ComputeSomethingLarge ); } private int ComputeSomethingLarge() { return ExpensiveCalculation(10000); }
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( LoadAndParseAsync ); } private async Task LoadAndParseAsync() { await LoadFileAsync(); await ParseAsync(); }
async Task GenericAsync() // Whatever async code your writing { ParsedData data = await ts.RunInThreadAsync( LoadAndParseDataAsync ); } private async Task<ParsedData> LoadAndParseDataAsync() { string json = await LoadJsonAsync(); return ParseData( json ); }
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( () => ExpensiveCalculation(); ); }
Overload 1
"Complete this function on a worker thread"
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( DoHeavyWork ); } private void DoHeavyWork() { // CPU-bound or blocking work ExpensiveCalculation(); }
“return the value from this function that is completed on worker thread”
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( ComputeSomethingLarge ); } private int ComputeSomethingLarge() { return ExpensiveCalculation(10000); }Overload 3
"I need to await things while I complete this async pipeline"
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( LoadAndParseAsync ); } private async Task LoadAndParseAsync() { await LoadFileAsync(); await ParseAsync(); }Overload 4
“I need to produce a value from an awaited async pipeline”
async Task GenericAsync() // Whatever async code your writing { ParsedData data = await ts.RunInThreadAsync( LoadAndParseDataAsync ); } private async Task<ParsedData> LoadAndParseDataAsync() { string json = await LoadJsonAsync(); return ParseData( json ); }these also work the anonymous functions but those examples were harder to parse quickly
example of using anonymous function for Overload 1
async Task GenericAsync() // Whatever async code your writing { await ts.RunInThreadAsync( () => ExpensiveCalculation(); ); }