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()
),否则主线程立即退出,应用程序关闭。