C# 如何从一个应用程序中创建多个线程而不侦听它们的响应?
我正在努力做到以下几点: 我有一个服务器,它应该从队列中获取许多消息并进行处理。现在我想要的是为每条消息创建一个新线程,这些线程将处理对队列的响应,我只希望我的服务器(核心线程)只监听消息并创建线程,而不关心它们发生了什么 我怎样才能做到这一点?我知道我可以使用C# 如何从一个应用程序中创建多个线程而不侦听它们的响应?,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,我正在努力做到以下几点: 我有一个服务器,它应该从队列中获取许多消息并进行处理。现在我想要的是为每条消息创建一个新线程,这些线程将处理对队列的响应,我只希望我的服务器(核心线程)只监听消息并创建线程,而不关心它们发生了什么 我怎样才能做到这一点?我知道我可以使用Thread类来创建线程,但是应用程序只会一直侦听线程,直到if完成。 我还可以创建一个async方法并运行它,但是当它完成时会发生什么呢?如果我希望方法是async,那么该方法应该是静态的,但在我当前的应用程序中,这不是一个解决方案,因
Thread
类来创建线程,但是应用程序只会一直侦听线程,直到if完成。
我还可以创建一个async
方法并运行它,但是当它完成时会发生什么呢?如果我希望方法是async
,那么该方法应该是静态的,但在我当前的应用程序中,这不是一个解决方案,因为我在该方法中使用了许多非静态变量
如果您有任何想法,我们将不胜感激。这是什么意思
我知道我可以使用Thread类来创建线程,但是应用程序只会一直侦听线程,直到if完成
只需生成线程并让其运行:
{
Thread t = new Thread(Foo);
t.Start();
}
public void Foo()
{ }
这不会使主线程侦听子线程,它只是生成它们并继续按照以下说明工作
顺便说一句,有很多结果。你说的是什么意思
我知道我可以使用Thread类来创建线程,但是应用程序只会一直侦听线程,直到if完成
只需生成线程并让其运行:
{
Thread t = new Thread(Foo);
t.Start();
}
public void Foo()
{ }
这不会使主线程侦听子线程,它只是生成它们并继续按照以下说明工作
顺便说一句,上面有大量的结果。除非您有非常具体的原因,否则我建议使用任务而不是线程。 可能它们无论如何都会在后台运行,但它们产生的CPU/内存开销较少,而且(在我看来)在出现异常时更容易处理
Task t = Task.Run(() => ProcessMessage(message));
也许可以看看,除非你有非常具体的原因,否则我建议使用任务而不是线程。 可能它们无论如何都会在后台运行,但它们产生的CPU/内存开销较少,而且(在我看来)在出现异常时更容易处理
Task t = Task.Run(() => ProcessMessage(message));
请看一看,因为我不喜欢别人这样做,下面是每种方法的简单示例(异步/基于任务),您可以选择您喜欢的方法 异步实现
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
ProcessDataAsync(data);
}
}
async private void ProcessDataAsync(string msg)
{
// The *await* keyword returns to caller and allows main thread to continue looping.
bool result = await ParseDataAndSaveSomewhere(msg);
return;
}
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
Task task = new Task(() => { ProcessData(data) });
task.Start();
}
}
private void ProcessData(string data)
{
// Do work
}
基于任务的实施
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
ProcessDataAsync(data);
}
}
async private void ProcessDataAsync(string msg)
{
// The *await* keyword returns to caller and allows main thread to continue looping.
bool result = await ParseDataAndSaveSomewhere(msg);
return;
}
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
Task task = new Task(() => { ProcessData(data) });
task.Start();
}
}
private void ProcessData(string data)
{
// Do work
}
因为我不喜欢别人这样做,这里有每种方法的简单示例(异步/基于任务),您可以选择您喜欢的方法 异步实现
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
ProcessDataAsync(data);
}
}
async private void ProcessDataAsync(string msg)
{
// The *await* keyword returns to caller and allows main thread to continue looping.
bool result = await ParseDataAndSaveSomewhere(msg);
return;
}
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
Task task = new Task(() => { ProcessData(data) });
task.Start();
}
}
private void ProcessData(string data)
{
// Do work
}
基于任务的实施
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
ProcessDataAsync(data);
}
}
async private void ProcessDataAsync(string msg)
{
// The *await* keyword returns to caller and allows main thread to continue looping.
bool result = await ParseDataAndSaveSomewhere(msg);
return;
}
int main()
{
while(true)
{
string data = SomeMethodThatReturnsTheNextDataFromQueue();
Task task = new Task(() => { ProcessData(data) });
task.Start();
}
}
private void ProcessData(string data)
{
// Do work
}