Async ve Await ile Asenkron Programlama

Performans dar-boğazlarını önlemek ve genel uygulama duyarlılığını arttırmak için asenkron programlama kullanabiliriz. Ancak, asenkron uygulamalar yazmak için kullanılan geleneksel teknikler, uygulamaları, kodlama, hata ayıklama ve bakım yönünden daha karmaşık hale getirebilir.

Visual Studio 2012, .NET Framework 4.5 ve Windows Runtime ile asenkron programlar yazmak oldukça basitleşti. async ve await niteleyicileri ile derleyici, geliştiricinin yapması gereken zor işleri üzerine aldı ve uygulama senkron kod benzeri mantıksal yapısını koruyabildi. Sonuç olarak, daha az çaba ile asenkron programlamanın tüm avantajlarından faydalanabiliyoruz.

using System.Threading;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            LongRunningProcessAsync();

            MessageBox.Show("Started.");
        }

        private async void LongRunningProcessAsync()
        {
            await Task.Run(() =>
            {
                for (int i = 0; i < 5000; i++)
                {
                    Thread.Sleep(1);
                }

                MessageBox.Show("Finished!");
            });

            MessageBox.Show("Awaited message.");
        }
    }
}
<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="525">
    <Grid>
        <ProgressBar HorizontalAlignment="Left" Height="10" Margin="8,8,0,0" VerticalAlignment="Top" Width="493" IsIndeterminate="True"/>
        <Button Content="Start" HorizontalAlignment="Left" Margin="200,72,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    </Grid>
</Window>