Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir yöntemin async , lambda ifadesinin veya anonim yöntemin zaman uyumsuz olduğunu belirtmek için değiştiriciyi kullanın. Bu değiştiriciyi bir yöntem veya ifadede kullanırsanız, zaman uyumsuz bir yöntem oluşturursunuz. Aşağıdaki örnek adlı ExampleMethodAsynczaman uyumsuz bir yöntemi tanımlar:
public async Task<int> ExampleMethodAsync()
{
//...
}
C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.
Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.
Tavsiye
Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.
Zaman uyumsuz programlama konusunda yeniyseniz veya zaman uyumsuz bir yöntemin çağıranın await iş parçacığını engellemeden uzun süre çalışan bir iş yapmak için işlecini nasıl kullandığını bilmiyorsanız, zaman uyumsuz programlama ile zaman uyumsuz programlamaya giriş ve bekleme konularını okuyun. Aşağıdaki kod zaman uyumsuz bir yöntem içinde bulunur ve yöntemini çağırır HttpClient.GetStringAsync :
string contents = await httpClient.GetStringAsync(requestUrl);
Zaman uyumsuz bir yöntem, ilk await ifadesine ulaşana kadar zaman uyumlu olarak çalışır. Bu noktada, beklenen görev tamamlanana kadar yöntemi askıya alınır. Bu arada, denetim, bir sonraki bölümdeki örnekte gösterildiği gibi yöntemi çağırana döner.
Anahtar sözcüğün async değiştirdiği yöntem bir await ifade veya deyim içermiyorsa, yöntem zaman uyumlu olarak yürütülür. Derleyici uyarısı, deyim içermeyen zaman uyumsuz yöntemler await konusunda sizi uyarır çünkü bu durum bir hataya işaret edebilir. Bkz. Derleyici Uyarısı (düzey 1) CS4014.
Anahtar async sözcük bağlamsaldır. Yalnızca bir yöntemi, lambda ifadesini veya anonim bir yöntemi değiştirdiğinde anahtar sözcüktür. Diğer tüm bağlamlarda, derleyici bunu bir tanımlayıcı olarak yorumlar.
Aşağıdaki örnekte, zaman uyumsuz olay işleyicisi ile zaman uyumsuz bir yöntem arasındaki denetim yapısı ve akışı gösterilmektedirStartButton_ClickExampleMethodAsync. Zaman uyumsuz yönteminden elde edilen sonuç, web sayfasının karakter sayısıdır. Kod, Visual Studio'da oluşturduğunuz bir Windows Presentation Foundation (WPF) uygulaması veya Windows Mağazası uygulaması için uygundur. Uygulamayı ayarlamak için kod açıklamalarına bakın.
Bu kodu Visual Studio'da Windows Presentation Foundation (WPF) uygulaması veya Windows Mağazası uygulaması olarak çalıştırabilirsiniz. adlı bir Düğme denetimine ve adlı StartButtonResultsTextBoxbir Textbox denetimine ihtiyacınız vardır. Adları ve işleyiciyi şöyle bir şeye sahip olacak şekilde ayarlamayı unutmayın:
<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="<Enter a URL>" VerticalAlignment="Top" Width="310" Name="ResultsTextBox"/>
Kodu WPF uygulaması olarak çalıştırmak için:
- Bu kodu MainWindow.xaml.cs sınıfına
MainWindowyapıştırın. - System.Net.Http'ye başvuru ekleyin.
- System.Net.Http için bir
usingyönerge ekleyin.
Kodu bir Windows Mağazası uygulaması olarak çalıştırmak için:
- Bu kodu MainPage.xaml.cs sınıfına
MainPageyapıştırın. - System.Net.Http ve System.Threading.Tasks için yönergeler ekleyin
using.
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:N0}\n", length);
}
catch (Exception)
{
// Process the exception if one occurs.
}
}
public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
int exampleInt = (await httpClient.GetStringAsync("http://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;
}
// The example displays the following output:
// Preparing to finish ExampleMethodAsync.
// Length: 53292
Önemli
Görevler ve görev beklerken yürütülen kod hakkında daha fazla bilgi için bkz . Zaman uyumsuz ve await ile zaman uyumsuz programlama. Benzer öğelerin kullanıldığı tam konsol örneği için bkz . Zaman uyumsuz görevleri tamamlandıklarında işleme (C#).
Dönüş türleri
Zaman uyumsuz bir yöntem aşağıdaki dönüş türlerine sahip olabilir:
- Task
- Task<TResult>
-
void. Genellikle, çağıranlar bu yöntemleri gerçekleştiremediğindenawaitve başarılı tamamlama veya hata koşullarını bildirmek için farklı bir mekanizma uygulaması gerektiğinden, olay işleyicileri dışındaki kodlar için yöntemleri kullanmaktanasync voidkaçının. - Erişilebilir
GetAwaiterbir yöntemi olan herhangi bir tür. TürSystem.Threading.Tasks.ValueTask<TResult>, böyle bir uygulamadır. NuGet paketiSystem.Threading.Tasks.Extensionseklenerek kullanılabilir.
Zaman uyumsuz yöntem herhangi bir in, ref, ref readonlyveya parametresini bildiremez veya outbir başvuru dönüş değerine sahip olamaz. Ancak, bu tür parametreleri olan yöntemleri çağırabilir.
yönteminin return deyimi türünde bir işlenen belirtiyorsa, zaman uyumsuz yöntemin dönüş türü TResultolarak belirtinTask<TResult>. Tamamlandığında yöntem anlamlı bir değer döndürmezse kullanın Task . Yani, yöntemine yapılan bir çağrı bir Taskdöndürür, ancak Task tamamlandığında, öğesini bekleyen await tüm Task ifadeler voidolarak değerlendirilir.
void Dönüş türünü öncelikli olarak, bu dönüş türünü gerektiren olay işleyicilerini tanımlamak için kullanın. -dönen bir voidzaman uyumsuz yöntemi çağıran onu bekleyemiyor ve yöntemin attığı özel durumları yakalayamıyor. Kodun performans açısından kritik bölümlerinde bellek ayırmalarını en aza indirmek için bir yöntemi olan başka bir tür (genellikle bir GetAwaiter değer türü) döndürür.
Daha fazla bilgi ve örnek için bkz . Zaman Uyumsuz Dönüş Türleri.