SORU
16 Kasım 2011, ÇARŞAMBA


Kurucular uyumsuz olabilir mi?

Yapıcı bazı verileri doldurmak için çalışıyorum nerede Silverlight projem var:

public class ViewModel
{
    public ObservableCollection<TData> Data { get; set; }

    async public ViewModel()
    {
        Data = await GetDataTask();
    }

    public Task<ObservableCollection<TData>> GetDataTask()
    {
        Task<ObservableCollection<TData>> task;

        //Create a task which represents getting the data
        return task;
    }
}

Ne yazık ki, bir hata alıyorum:

Değiştirici async Bu madde için geçerli değildir

Ben standart bir yöntem sarmak ve yapıcı dersen tabii ki,:

public async void Foo()
{
    Data = await GetDataTask();
}

gayet iyi çalışıyor. Eğer içeri-dışarı eski yolu kullanıyorum aynı şekilde

GetData().ContinueWith(t => Data = t.Result);

O da işe yarar. Sadece bir kurucu içinden await doğrudan arayamıyoruz neden merak ediyordum. Muhtemelen (hatta) açık kenar bir çok vaka ve buna karşı nedeni vardır, sadece herhangi bir şey bulamıyorum. Ayrıca bir açıklama için arama yaptım, ama bulamadım.

CEVAP
16 Kasım 2011, ÇARŞAMBA


Kurucu çok benzer bir yöntem inşa türünü döndürmek için hareket eder. Ve async yöntem ya “ve” void Task. unut ateşle olmalı sadece herhangi bir tür dönebilirsiniz.

Eğer tür oluşturucu T aslında çok kafa karıştırıcı olurdu Task<T>, döndü, sanırım.

Eğer uyumsuz kurucu async void bir yöntem olarak aynı şekilde davranır, yapıcı ne tatili böyle olması gerekiyordu. Kurucu döndükten sonra, tam olarak başlatılmış bir nesneyi almalısınız. Aslında düzgün olacak bir nesnenin gelecekte bazı tanımsız noktada başlatıldı. Eğer şanslıysan ve zaman uyumsuz başlatma başarısız değildir.

Tüm bu sadece bir tahmin. Ama uyumsuz bir kurucu imkanı olması buna değer daha fazla sorun getiriyor gibi geliyor bana.

Eğer sizin istediğiniz “ateşle ve unut” anlam async void yöntemleri (hangi kaçınılmalıdır mümkünse), kolayca saklanması tüm kod async void yöntem ve ara kendi kurucu olarak belirtilen soru.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ICON

    ICON

    19 EKİM 2011
  • magnum33563

    magnum33563

    8 NİSAN 2011
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009