This page says it all,
https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx
Culture and task-based asynchronous operations
The task-based asynchronous programming pattern uses Task and
Task objects to asynchronously execute delegates on thread
pool threads. The specific thread on which a particular task runs is
not known in advance, but is determined only at runtime.
For apps the target the .NET Framework 4.6 RC or later versions,
culture is part of an asynchronous operation's context. In other
words, starting with apps the target the .NET Framework 4.6 RC,
asynchronous operations by default inherit the values of the
CurrentCulture and CurrentUICulture properties of the thread from
which they are launched. If the current culture or current UI culture
differs from the system culture, the current culture crosses thread
boundaries and becomes the current culture of the thread pool thread
that is executing an asynchronous operation.
The following example provides a simple illustration. It uses the
TargetFrameworkAttribute attribute to target the .NET Framework 4.6
RC. The example defines a Func delegate, formatDelegate,
that returns some numbers formatted as currency values. The example
changes the current system culture to either French (France) or, if
French (France) is already the current culture, English (United
States). It then:
- Invokes the delegate directly so that it runs synchronously on the main app thread.
- Creates a task that executes the delegate asynchronously on a thread pool thread.
- Creates a task that executes the delegate synchronously on the main app thread by calling the Task.RunSynchronously method.
You can see from the code sample to see how to explicitly mark your program as .NET 4.6 targeted. Then CLR uses the new behavior. For all assemblies without such an attribute, or the value is not 4.6, the old behavior is kept.