lima-city: Webhosting, Domains und Cloud
1 Pluspunkt 0 Minuspunkte

Wenn ich eine async Methode aus der Main Methode mit await aufrufen möchte

using System;
using System.Threading.Tasks;

public class Program
{
	public static void Main()
	{
		await MachEtwas();
	}
	
	private async void MachEtwas() {
		Task.Delay(2000);
	}
}

dann bekomme ich einen Fehler angezeigt

The 'await' operator can only be used within an async method.

Aber wie rufe ich das dann aus Main auf?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Du kannst deine Main Methode selbst zu einem async Task machen.

static async Task Main(string[] args) { ... }

Außerdem muss deine MachEtwas() Methode auch ein Task Objekt zurückgeben.

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await MachEtwas(); 
        Console.WriteLine("Erledigt..");
    }

    static async Task MachEtwas()
    {
        await Task.Delay(2000);
    }
}
von (593 Punkte)  
0 Pluspunkte 0 Minuspunkte

Du kannst sie über ein Event aufrufen. Definiere in deiner Klasse einen EventHandler.

static event EventHandler OnStart;

In deiner Main Methode kannst du dem OnStart EventHandler ein Event registrieren und das Event manuell triggern.

OnStart += async (sender, e) => await MachEtwas();
OnStart?.Invoke(null, EventArgs.Empty);

Die Main Methode muss auch ein async Task sein, kein void.

private async Task MachEtwas()
von (464 Punkte)