Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Interlocked.Exchange<T>(T, T)

 

Data di pubblicazione: ottobre 2016

Imposta una variabile del tipo T indicato sul valore specificato e restituisce il valore originale, come operazione atomica.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(false)]
public static T Exchange<T>(
	ref T location1,
	T value
)
where T : class

Parametri

location1
Type: T

Variabile da impostare sul valore specificato. Rappresenta un parametro di riferimento (ref in C#, ByRef in Visual Basic).

value
Type: T

Valore su cui è impostato il parametro location1.

Valore restituito

Type: T

Valore originale di location1.

Parametri tipo

T

Tipo da usare per location1 e value. Questo tipo deve essere un tipo di riferimento.

Exception Condition
NullReferenceException

L'indirizzo di location1 è un puntatore Null.

This method only supports reference types. There are overloads of the Overload:System.Threading.Interlocked.Exchange method for the T:System.Int32, T:System.Int64, T:System.IntPtr, T:System.Single, and T:System.Double value types, but there is no support for other value types.

System_CAPS_noteNota

This method overload is preferable to the M:System.Threading.Interlocked.Exchange(System.Object@,System.Object) method overload, because the latter requires late-bound access to the destination object .

The following example launches ten tasks, each of which generates 100 ten-character part numbers. It then the part number that is first alphabetically.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Widget
{
   public Widget(String id)
   {
      this.Id = id;
   }

   public String Id { get; set; }
   public String Description { get; set; }
}


public class Example
{
   public static void Main()
   {
      Widget firstWidget = null;
      var tasks = new List<Task>();
      for (int ctr = 0; ctr <= 10; ctr++) {
         tasks.Add(Task.Run( () => { // Give each task its own random number generator.
                                     var rnd = new Random();
                                     for (int widgetIndex = 0; widgetIndex <= 100; widgetIndex++) {
                                        //Generate ten random characters from U+0041 to U+005A.
                                        String id = String.Empty;
                                        for (int charCtr = 0; charCtr <= 9; charCtr++)
                                           id += Convert.ToChar(rnd.Next(0x0041, 0x005B));

                                        var newWidget = new Widget(id);
                                        if (firstWidget == null)
                                           firstWidget = newWidget;
                                        else if (newWidget.Id.CompareTo(firstWidget.Id) < 0)
                                           Interlocked.Exchange(ref firstWidget, newWidget);

                                     }
                                   } ));
      }
      try {
         Task.WaitAll(tasks.ToArray());
         Console.WriteLine("The widget with the lowest id: {0}", firstWidget.Id);
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions)
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
      }
   }
}
// The example displays output like the following:
//   The widget with the lowest id: ACHZVFBYNU

The example uses the firstWidget variable to store the ID that occurs first in the sort order. It compares each ID that it generates with the firstWidget value. If the new value precedes the current value of firstWidget in the sort order, the example calls the M:System.Threading.Interlocked.Exchange``1(``0@,``0) method to assign the new value to firstWidget.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: