Task.RunSynchronously Yöntem

Tanım

geçerli TaskTaskSchedulerüzerinde zaman uyumlu olarak çalıştırır.

Aşırı Yüklemeler

RunSynchronously()

geçerli TaskTaskSchedulerüzerinde zaman uyumlu olarak çalıştırır.

RunSynchronously(TaskScheduler)

sağlanan Task üzerinde TaskScheduler zaman uyumlu olarak çalıştırır.

RunSynchronously()

Kaynak:
Task.cs
Kaynak:
Task.cs
Kaynak:
Task.cs

geçerli TaskTaskSchedulerüzerinde zaman uyumlu olarak çalıştırır.

public void RunSynchronously();

Özel durumlar

Örnek Task atılmıştır.

Task başlatılacak geçerli bir durumda değil. Önceden başlatılmış, yürütülmüş veya iptal edilmiş veya doğrudan zamanlamayı desteklemeyen bir şekilde oluşturulmuş olabilir.

Örnekler

Aşağıdaki örnek, yöntemini çağırarak RunSynchronously yürütülen bir görevi zaman uyumsuz olarak yürütülen bir görevle karşılaştırır. Her iki durumda da görevler, görevin çalıştığı iş parçacığının kimliğini ve görev kimliğini görüntüleyen aynı lambda ifadelerini yürütür. Görev, 1 ile 1.000.000 arasındaki tamsayıların toplamını hesaplar. Örnekteki çıktıda gösterildiği gibi, yöntemi çağrılarak RunSynchronously yürütülen görev uygulama iş parçacığında çalıştırılır, ancak zaman uyumsuz görev çalışmaz.

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

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Application executing on thread {0}",
                        Thread.CurrentThread.ManagedThreadId);
      var asyncTask = Task.Run( () => {  Console.WriteLine("Task {0} (asyncTask) executing on Thread {1}",
                                                           Task.CurrentId,
                                                           Thread.CurrentThread.ManagedThreadId);
                                         long sum = 0;
                                         for (int ctr = 1; ctr <= 1000000; ctr++ )
                                            sum += ctr;
                                         return sum;
                                      });
      var syncTask = new Task<long>( () =>  { Console.WriteLine("Task {0} (syncTask) executing on Thread {1}",
                                                                 Task.CurrentId,
                                                                 Thread.CurrentThread.ManagedThreadId);
                                              long sum = 0;
                                              for (int ctr = 1; ctr <= 1000000; ctr++ )
                                                 sum += ctr;
                                              return sum;
                                            });
      syncTask.RunSynchronously();
      Console.WriteLine();
      Console.WriteLine("Task {0} returned {1:N0}", syncTask.Id, syncTask.Result);
      Console.WriteLine("Task {0} returned {1:N0}", asyncTask.Id, asyncTask.Result);
   }
}
// The example displays the following output:
//       Application executing on thread 1
//       Task 1 (syncTask) executing on Thread 1
//       Task 2 (asyncTask) executing on Thread 3
//       1 status: RanToCompletion
//       2 status: RanToCompletion
//
//       Task 2 returned 500,000,500,000
//       Task 1 returned 500,000,500,000

Açıklamalar

Normalde, görevler iş parçacığı havuzu iş parçacığında zaman uyumsuz olarak yürütülür ve çağıran iş parçacığını engellemez. yöntemi çağrılarak RunSynchronously() yürütülen görevler geçerli TaskScheduler ile ilişkilendirilir ve çağıran iş parçacığında çalıştırılır. Hedef zamanlayıcı bu görevi çağıran iş parçacığında çalıştırmayı desteklemiyorsa, görev zamanlayıcıda yürütülecek şekilde zamanlanır ve görev yürütme tamamlanana kadar çağıran iş parçacığı engellenir. Görev zaman uyumlu olarak çalışsa da, çağıran iş parçacığı yine de görevin atabileceği özel durumları işlemek için çağırmalıdır Wait . Özel durum işleme hakkında daha fazla bilgi için bkz. Özel Durum İşleme.

yöntemi çağrılarak yürütülen görevlerin RunSynchronously örneği, veya TaskTask<TResult> sınıf oluşturucu çağrılarak oluşturulur. Zaman uyumlu olarak çalıştırılacak görevin durumunda olması Created gerekir. Bir görev başlatılabilir ve yalnızca bir kez çalıştırılabilir. Bir görevi ikinci kez zamanlama girişimleri özel durumla sonuçlanır.

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

RunSynchronously(TaskScheduler)

Kaynak:
Task.cs
Kaynak:
Task.cs
Kaynak:
Task.cs

sağlanan Task üzerinde TaskScheduler zaman uyumlu olarak çalıştırır.

public void RunSynchronously(System.Threading.Tasks.TaskScheduler scheduler);

Parametreler

scheduler
TaskScheduler

Bu görevi satır içinde çalıştırmayı deneyecek zamanlayıcı.

Özel durumlar

Örnek Task atılmıştır.

scheduler bağımsız değişkenidirnull.

Task başlatılacak geçerli bir durumda değil. Önceden başlatılmış, yürütülmüş veya iptal edilmiş veya doğrudan zamanlamayı desteklemeyen bir şekilde oluşturulmuş olabilir.

Açıklamalar

yöntemi çağrılarak yürütülen görevlerin RunSynchronously örneği, veya TaskTask<TResult> sınıf oluşturucu çağrılarak oluşturulur. Zaman uyumlu olarak çalıştırılacak görevin durumunda olması Created gerekir. Bir görev başlatılabilir ve yalnızca bir kez çalıştırılabilir. Bir görevi ikinci kez zamanlama girişimleri özel durumla sonuçlanır.

Hedef zamanlayıcı bu görevin geçerli iş parçacığında çalıştırılmasını desteklemiyorsa, görev zamanlayıcıda yürütülecek şekilde zamanlanır ve görev yürütme tamamlanana kadar geçerli iş parçacığı bunu engeller. Bu nedenle, çağıran iş parçacığının, görevin yürütülmesinin tamamlandığından emin olmak için gibi Wait bir yöntemi çağırması gerekmez. Görev işlemleri için özel durum işleme hakkında daha fazla bilgi için bkz. Özel Durum İşleme.

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0