I found it useful to do multiple reads in parallel with a set of my extension methods TaskFactory
that could be used as:
static async Task Main(string() args)
{
var (r1, r2, r3, r4) = await Task.Factory.StartNew(
Read1Async, Read2Async, Read3Async, Read4Async);
async Task Read1Async() => /* cut as not relevant */;
async Task Read2Async() => /* cut as not relevant */;
async Task Read3Async() => /* cut as not relevant */;
async Task Read4Async() => /* cut as not relevant */;
}
The actual help code is:
public static class TaskFactoryExtensions
{
public async static Task<(T1, T2)> StartNew(
this TaskFactory taskFactory,
Func> action1,
Func> action2)
{
var task1 = Task.Run(action1);
var task2 = Task.Run(action2);
return (await task1, await task2);
}
public async static Task<(T1, T2, T3)> StartNew(
this TaskFactory taskFactory,
Func> action1,
Func> action2,
Func> action3)
{
var task1 = Task.Run(action1);
var task2 = Task.Run(action2);
var task3 = Task.Run(action3);
return (await task1, await task2, await task3);
}
public async static Task<(T1, T2, T3, T4)> StartNew(
this TaskFactory taskFactory,
Func> action1,
Func> action2,
Func> action3,
Func> action4)
{
var task1 = Task.Run(action1);
var task2 = Task.Run(action2);
var task3 = Task.Run(action3);
var task4 = Task.Run(action4);
return (await task1, await task2, await task3, await task4);
}
}
It saves only when typing …