C# 是否可以从不同于Main()线程的单独线程写入控制台?或者我做错了什么?

C# 是否可以从不同于Main()线程的单独线程写入控制台?或者我做错了什么?,c#,.net,multithreading,asynchronous,async-await,C#,.net,Multithreading,Asynchronous,Async Await,我的控制台应用程序有以下基本功能: static void Main(string[] args) { // Attempt at a DNS attack Task.Run(async () => { for(;;;) { HttpWebResponse resp = await DoSomethingAsync(); await Task.Delay(50); }

我的
控制台应用程序有以下基本功能:

static void Main(string[] args)
{
    // Attempt at a DNS attack
    Task.Run(async () =>
    {
        for(;;;)
        {
            HttpWebResponse resp = await DoSomethingAsync();
            await Task.Delay(50);
        }
    });
}

static void PrintResponseToConsole(HttpWebResponse response)
{
    // ... Console.WriteLine some stuff
}

然而,当我运行它时,我什么也看不到。如何更好地执行此操作?

您可能缺少一行实际调用
PrintResponseToConsole()
方法的代码:

static void Main(string[] args)
{
    // Attempt at a DNS attack
    Task.Run(async () =>
    {
        for(;;;)
        {
            HttpWebResponse resp = await DoSomethingAsync();
            PrintResponseToConsole(resp); // <---------- THIS LINE
            await Task.Delay(50);
        }
    });
}
static void Main(字符串[]args)
{
//尝试DNS攻击
Task.Run(异步()=>
{
对于(;;)
{
HttpWebResponse resp=wait DoSomethingAsync();

PrintResponseToConsole(resp);//您可以从任何线程写入控制台。
控制台
类型具有内部锁定,专门用于支持多线程访问

您的主线程可能会立即退出;您需要阻止
main
,直到您准备退出。例如:

static void Main(string[] args)
{
  Task.Run(async () =>
  {
    for(;;;)
    {
      HttpWebResponse resp = await DoSomethingAsync();
      await Task.Delay(50);
    }
  });
  Console.ReadKey();
}

您在哪里调用打印到控制台的方法?
PrintResponseToConsole
中的@EhsanSajjad,顾名思义,您在代码中调用
PrintResponseToConsole
的位置?我们真的应该帮助编写“DNS攻击”代码吗?您必须等待任务(例如
Task.Run(async()=>{…})。等待()
,或者使用另一种方法阻止主线程(例如,
控制台.ReadKey()
),否则主线程立即退出,应用程序关闭。