Aracılığıyla paylaş


async (C# Başvurusu)

Bir yöntemin; lambda ifadesi veya anonim yöntemin zaman uyumsuz olduğunu belirtmek için async değiştiricisini kullanın.Bu değiştiriciyi bir yöntem veya ifadede kullanırsanız, buna bir zaman uyumsuz yöntem olarak başvurulur.

public async Task<int> ExampleMethodAsync()
{
    // . . . .
}

Zaman uyumsuz programlamada yeniyseniz veya zaman uyumsuz yöntemin arayanın, iş parçacığını engellemeden muhtemelen uzun süren bir işi yapmak için await anahtar sözcüğünü nasıl kullandığını anlamıyorsanız, Async ve Await ile Zaman Uyumsuz Programlama (C# ve Visual Basic) başlığı altındaki girişi okumalısınız.

string contents = await contentsTask;

Yöntem ilk await ifadesine ulaşana dek zaman uyumlu çalışır ve bu noktada beklenen görev tamamlanana kadar yöntem askıya alınır.Bu arada, denetim, bir sonraki bölümdeki örnekte gösterildiği gibi yöntemi çağırana döner.

async anahtar sözcüğünün değiştirdiği yöntem bir await ifadesi veya deyimi içermiyorsa, yöntem zaman uyumlu olarak çalışır.await içermeyen herhangi bir zaman uyumsuz (async) yöntem bir hatayı gösterebileceğinden, bir derleyici uyarısı sizi bu yöntemler konusunda uyarır.Bkz. Derleyici Uyarısı (düzey 1) CS4014.

async anahtar sözcüğü, yalnızca bir yöntem, lambda ifadesi veya anonim yöntemi değiştirdiğinde anahtar sözcük olduğundan bağlamsaldır.Tüm diğer bağlamlarda bu, tanımlayıcı olarak yorumlanır.

Örnek

Aşağıdaki örnek, bir StartButton_Click zaman uyumsuz olay işleyicisi ile ExampleMethodAsync zaman uyumsuz yöntemi arasındaki yapı ve denetim akışını gösterir.Zaman uyumsuz yöntemin sonucu indirilmiş bir Web sitesinin uzunluğudur.Kod, Visual Studio 2013 içinde oluşturduğunuz bir Windows Presentation Foundation (WPF) uygulamasına veya Windows Mağazası uygulamasına uygundur; uygulamayı hazırlama açıklamalarına bakın.

// You can run this code in Visual Studio 2013 as a WPF app or a Windows Store app.
// You need a button (StartButton) and a textbox (ResultsTextBox).
// Remember to set the names and handler so that you have something like this:
// <Button Content="Button" HorizontalAlignment="Left" Margin="88,77,0,0" VerticalAlignment="Top" Width="75"
//         Click="StartButton_Click" Name="StartButton"/>
// <TextBox HorizontalAlignment="Left" Height="137" Margin="88,140,0,0" TextWrapping="Wrap" 
//          Text="TextBox" VerticalAlignment="Top" Width="310" Name="ResultsTextBox"/>
        
// To run the code as a WPF app:
//    paste this code into the MainWindow class in MainWindow.xaml.cs,
//    add a reference to System.Net.Http, and
//    add a using directive for System.Net.Http.

// To run the code as a Windows Store app:
//    paste this code into the MainPage class in MainPage.xaml.cs, and
//    add using directives for System.Net.Http and System.Threading.Tasks.

private async void StartButton_Click(object sender, RoutedEventArgs e)
{
    // ExampleMethodAsync returns a Task<int>, which means that the method
    // eventually produces an int result. However, ExampleMethodAsync returns
    // the Task<int> value as soon as it reaches an await.
    ResultsTextBox.Text += "\n";
    try
    {
        int length = await ExampleMethodAsync();
        // Note that you could put "await ExampleMethodAsync()" in the next line where
        // "length" is, but due to when '+=' fetches the value of ResultsTextBox, you
        // would not see the global side effect of ExampleMethodAsync setting the text.
        ResultsTextBox.Text += String.Format("Length: {0}\n", length);
    }
    catch (Exception)
    {
        // Process the exception if one occurs.
    }
}

public async Task<int> ExampleMethodAsync()
{
    var httpClient = new HttpClient();
    int exampleInt = (await httpClient.GetStringAsync("https://msdn.microsoft.com")).Length;
    ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
    // After the following return statement, any method that's awaiting
    // ExampleMethodAsync (in this case, StartButton_Click) can get the 
    // integer result.
    return exampleInt;
}
// Output:
// Preparing to finish ExampleMethodAsync.
// Length: 53292
Önemli notÖnemli

Görevler ve bir görevi beklerken yürütülen kod hakkında daha fazla bilgi için bkz. Async ve Await ile Zaman Uyumsuz Programlama (C# ve Visual Basic). Benzer öğeleri kullanan eksiksiz bir WPF örneği için bkz. İzlenecek yol: Async ve Await Kullanarak Web'e Erişme (C# ve Visual Basic).Örnek kodu Geliştirici Kodu Örnekleri sayfasından indirebilirsiniz.

Dönüş Türleri

Bir zaman uyumsuz yöntem, Task, Task veya hükümsüz dönüş türlerine sahip olabilir.Yöntem herhangi bir ref veya out parametresi bildiremez, ancak bu tür parametreleri olan yöntemleri çağırabilir.

Yöntemin return deyimi TResult türünde bir işlenen belirtiyorsa, zaman uyumsuz bir yöntemin dönüş türü için Task<TResult> belirtirsiniz.Yöntem tamamlandığında anlamlı bir değer döndürülmezse Task kullanırsınız.Yani yönteme yapılan bir çağrı bir Task döndürür, ancak Task tamamlandığında, Task'ı bekleyen herhangi bir await ifadesi void değerini döndürür.

İlgili dönüş türünü gerektiren olay işleyicilerini tanımlamak için öncelikle void dönüş türünü kullanırsınız.void döndüren zaman uyumsuz bir yöntemi çağıran, yöntemi bekleyemez ve yöntemin oluşturduğu özel durumları yakalayamaz.

Daha fazla bilgi ve örnek için bkz. Zaman Uyumsuz Dönüş Türleri (C# ve Visual Basic).

Ayrıca bkz.

Görevler

İzlenecek yol: Async ve Await Kullanarak Web'e Erişme (C# ve Visual Basic)

Başvuru

await (C# Başvurusu)

AsyncStateMachineAttribute

Kavramlar

Async ve Await ile Zaman Uyumsuz Programlama (C# ve Visual Basic)