dotnet/runtime

Analyzer for STAThread attribute applied to async Main

Open

#78.502 aberto em 17 de nov. de 2022

Ver no GitHub
 (3 comments) (7 reactions) (0 assignees)C# (5.445 forks)batch import
api-approvedarea-System.Threading.Taskscode-analyzerhelp wanted

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

Describe the problem you are trying to solve

When the [STAThread] attribute is applied to an async Main method, it does not have the intended effect (the main thread of the application is not created with the single-threaded apartment state). Since this gotcha seems to be fairly common (see e.g. https://github.com/dotnet/roslyn/issues/22112 and the issues linked to it), users should be made aware of it.

Describe suggestions on how to achieve the rule

I'm not certain if a code fix is necessary, but it could remove [STAThread] from the async Main method and then do one of the following:

  1. Add Thread.CurrentThread.SetApartmentState(ApartmentState.STA); at the start of the async Main method.
  2. Rename the async Main method to MainAsync and then add [STAThread] static void Main() => MainAsync().GetAwaiter().GetResult();.

Guia do colaborador