En raison des informations suivantes de Microsoft, j'ai mis à jour mon code un peu. On dirait qu'ils ont mis à jour la culture actuelle à quelque chose que je pourrais utiliser.Async Thread.CurrentThread.CurrentCulture dans .net-4.6
Pour les applications qui ciblent le .NET Framework 4.6 et les versions ultérieures, CultureInfo.CurrentCulture et CultureInfo.CurrentUICulture sont stockés dans ExecutionContext d'un fil, qui coule à travers des opérations asynchrones . (source: https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx)
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("start " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
RunAsync().Wait();
Console.WriteLine("Finish " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
}
static async Task RunAsync()
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
Console.WriteLine("1 " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
string cultureInTask = string.Empty;
await Task.Run(() => cultureInTask = Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId).ConfigureAwait(true);
Console.WriteLine("2 " + cultureInTask);
string twoA = await TestMethodAsync();
Console.WriteLine("2a " + twoA + " " + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("3 " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
}
public static async Task<string> TestMethodAsync()
{
Console.WriteLine("2s " + Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId);
return await Task.Run(() =>
{
return System.Threading.Thread.CurrentThread.CurrentUICulture.ToString() + " " + Thread.CurrentThread.ManagedThreadId;
});
}
}
Sortie:
start en-US 1
1 de-DE 1
2 de-DE 3
2s de-DE 3
2a en-US 4 4
3 de-DE 4
Finish en-US 1
Mais pourquoi 2a retour en États-Unis et non de-DE? Est-ce parce que le contexte d'exécution est différent? Si oui, comment puis-je rester dans le même contexte d'exécution?
Pourriez-vous créer un lien vers la documentation que vous avez cité, s'il vous plaît? –
https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx Je l'ai également édité dans le message principal – user1408786
A été tenté de fermer cela comme une faute de frappe une fois que j'avais travaillé ça sort, mais je pense que c'est assez intéressant pour répondre à la place ... –