c#fungsi struktur asynchronous: Kelayakan meneroka
Dalam bidang pengaturcaraan, pembina memainkan peranan penting dalam memulakan keadaan objek apabila objek dibuat. Walau bagaimanapun, dalam pengaturcaraan asynchronous, masalah biasa muncul: Bolehkah pembina tidak segerak?
Sebab fungsi struktur tak segerak
Dalam beberapa kes, operasi tak segerak boleh digunakan untuk mengisi data dalam pembina. Pertimbangkan contoh berikut:
Dalam contoh ini, pembina direka untuk mendapatkan data secara tidak segerak apabila objek dibuat. Walau bagaimanapun, pengkompil C#akan menghasilkan ralat, menunjukkan bahawa pengubah "async" tidak dibenarkan digunakan dalam pembina.mengapa tidak membenarkan penggunaan pembina tak segerak
<code class="language-c#">public class ViewModel { public ObservableCollection<tdata> Data { get; set; } // 异步构造函数(无效语法) async public ViewModel() { Data = await GetDataTask(); } }</code>
Walaupun fungsi struktur tak segerak sangat menarik, ada alasan asas bagi mereka untuk tidak disokong dalam C#:
Keselamatan Thread:
Fungsi konstruktif mesti memastikan keselamatan benang, memastikan ia dapat dicipta serentak tanpa menyebabkan kerosakan data. Walau bagaimanapun, operasi tak segerak memperkenalkan kemungkinan keadaan persaingan, yang akan membahayakan keselamatan benang.Perintah Inisialisasi:
Inisialisasi kelewatan:
Anda boleh mendapatkan data secara asynchronously asynchronous dengan cara yang tertunda.Atas ialah kandungan terperinci Adakah async constructors boleh dilaksanakan di C#, dan mengapa atau mengapa tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!