Konvertieren Sie einfach Ihre Methode in Task. Wie bei @Romiox verwende ich normalerweise diese Erweiterung:
public static partial class Ext
{
#region Public Methods
public static Task ToTask(Action action)
{
return Task.Run(action);
}
public static Task<T> ToTask<T>(Func<T> function)
{
return Task.Run(function);
}
public static async Task ToTaskAsync(Action action)
{
return await Task.Run(action);
}
public static async Task<T> ToTaskAsync<T>(Func<T> function)
{
return await Task.Run(function);
}
#endregion Public Methods
}
Lassen Sie uns jetzt sagen, dass Sie haben
void foo1()...
void foo2(int i1)...
int foo3()...
int foo4(int i1)...
...
Dann können Sie Ihre [asynchrone Methode] wie @Romiox deklarieren
async Task foo1Async()
{
return await Ext.ToTask(() => foo1());
}
async Task foo2Async(int i1)
{
return await Ext.ToTask(() => foo2(i1));
}
async Task<int> foo3Async()
{
return await Ext.ToTask(() => foo3());
}
async Task<int> foo4Async(int i1)
{
return await Ext.ToTask(() => foo4(i1));
}
ODER
async Task foo1Async()
{
return await Ext.ToTaskAsync(() => foo1());
}
async Task foo2Async(int i1)
{
return await Ext.ToTaskAsync(() => foo2(i1));
}
async Task<int> foo3Async()
{
return await Ext.ToTaskAsync(() => foo3());
}
async Task<int> foo4Async(int i1)
{
return await Ext.ToTaskAsync(() => foo4(i1));
}
...
Jetzt können Sie async verwenden und auf eine der fooAsync-Methoden warten, z. B. foo4Async
async Task<int> TestAsync () {
int m = 3;
var X = foo4Async(m);
var Result = await X;
return Result;
}
Task
oder zurückgibtTask<T>
. Async ist auf diese Weise gut zusammensetzbar.