SORU
9 ŞUBAT 2012, PERŞEMBE


Konsolun ana yöntem zaman uyumsuz app

Zaman uyumsuz dünyada acemi eminim, ve bir konsol uygulaması ana benim yöntem aslında uyumsuz çalışır emin olmak için nasıl anlamaya çalışıyorum

class Program
{
    static void Main(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = bs.GetList();
    }
}

public class Bootstrapper {

    public async Task<List<TvChannel>> GetList()
    {
        GetPrograms pro = new GetPrograms();

        return await pro.DownloadTvChannels();
    }
}

Bu zaman uyumsuz çalışmıyor biliyorum "top". ancak zaman uyumsuz ile Ana işaretlemek için emin olun nasıl hiçbir fikrim yok. Herhangi bir fikir ? Teşekkür ederim!

CEVAP
9 ŞUBAT 2012, PERŞEMBE


, VS11 seni keşfettiği gibi derleyici async Main bir yöntem izin vermez. Bu izin (ama hiç tavsiye) Uyumsuz CTP ile VS2010 oldu.

async/await özellikle asynchronous console programs son blog yazıları var. İşte bazı arka plan intro sonrası gelen bilgi:

Eğer "bekliyor awaitable tamamlanmadı, o zaman uyumsuz olarak görür." görürse Tamamlandığında yöntemi geri kalanını çalıştırmak için awaitable söyler, ve sonraverirzaman uyumsuz yöntemi. Bekliyor da geçerli yakalayacaktırbağlambu awaitable yöntemine geri kalanı geçtiğinde.

Bu awaitable tamamlandığında daha sonra, zaman uyumsuz yöntem (yakalanan çerçevesinde) kalan çalıştırır.

Bu async Main: bir programları Konsolda bir sorun burada

Zaman uyumsuz bir yöntem olacak ıntro bizim yazı hatırlıyorumdönüştamamlanmadan önce, arayanın için. Bu mükemmel UI uygulamalar (bu yöntem sadece UI olay döngü döner) ASP.NET uygulamalar (yöntem iplik verir ama hayatta isteği tutar) çalışır. Çalışmak çok iyi programlar Konsol değil: OS Ana döner - çok program çıkar.

Tek çözüm kendi bağlam - "" uyumsuz-uyumlu konsol programı sizin için. ana döngü sağlamaktır.

Eğer Uyumsuz CTP ile bir makine varsa, GeneralThreadAffineContext kullanabilirsinizBelgelerim\Microsoft Visual Studio Async CTP\Örnekler(C#) Testi Birim Testi\AsyncTestUtilities. Alternatif olarak, my Nito.AsyncEx NuGet package 12 *kullanabilirsiniz.

Örnek AsyncContext; GeneralThreadAffineContext kullanarak hemen hemen aynı kullanımı vardır:

using Nito.AsyncEx;
class Program
{
    static void Main(string[] args)
    {
        AsyncContext.Run(() => MainAsync(args));
    }

    static async void MainAsync(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = await bs.GetList();
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Call Me Howard

    Call Me Howa

    18 AĞUSTOS 2012
  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • picster

    picster

    20 NİSAN 2006