. setInterval()
Cabaran:
Matlamatnya adalah untuk melaksanakan kaedah tak segerak secara berkala (mis., Menghantar data yang dikumpulkan ke perkhidmatan jauh) tanpa menyekat interaksi pengguna. Kesukaran terletak pada penjadualan tugas tidak segerak ini dengan sewajarnya.
penyelesaian mudah (dengan kaveat):
.net's kelas, menggunakan acara Timer
, memberikan pendekatan mudah. Walau bagaimanapun, tandatangan yang diperlukan (Elapsed
) tidak serasi dengan tanda tangan void MethodName(object e, ElapsedEventArgs args)
tanda tangan (async
). async Task MethodName(object e, ElapsedEventArgs args)
penyelesaian menggunakan : Task.Delay()
dan while
, yang secara dalaman menggunakan pemasa: Task.Delay()
public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await FooAsync(); await Task.Delay(interval, cancellationToken); } }
pada FooAsync()
yang ditentukan. Penambahan kritikal ialah interval
, membolehkan penamatan tugas yang anggun, terutamanya penting semasa penutupan permohonan. cancellationToken
Pertimbangan penting untuk Asp.net Core:
Atas ialah kandungan terperinci Bagaimana cara rekursif menjadualkan tugas async dalam teras ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!