我正在开发一个web api项目,其中用户执行某些操作,并且所有相关用户都获得有关用户活动的通知。为了通知每个用户我正在启动一个执行欲望操作的新线程。是否有必要等待此线程在请求完成之前终止并将结果返回给用户。
P.S。线程的执行时间可能会随着用户的增加而增加。
如果可能,请建议任何备用
程序逻辑(目前我使用等待函数等待异步函数执行)
public async Task<IHttpActionResult> doSomething(arguments)
{
.
.
.
.
<!-- Perform some operation which includes some database transcations--!>
if(operation succesed)
{
await Notification(userid);
}
return result;
}
答案 0 :(得分:0)
static void Main(string[] args)
{
var userIds = new[] { 1, 2, 3, 4, 5};
Console.WriteLine("Updating db for users...");
// Start new thread for notficiation send-out
Task.Run(() =>
{
foreach (var i in userIds)
Console.WriteLine("Sending notification for #user " + i);
}).ContinueWith(t => Console.WriteLine("Notifcation all sent!"));
Console.WriteLine("Return the result before notification all sent out!");
}
如果删除Task.Run()前面的await
(相当于在你的情况下返回Task&lt;&gt;的Notifcation())并运行,那么它将为通知发送创建单独的线程。 / p>
答案 1 :(得分:0)
public async Task<IHttpActionResult> doSomething(arguments)
{
bool isInsertDone ,isUpdateDone = false;
//create thread list
var task = new List<Task>();
// parallel tasks to thread list and execute that tasks
task.Add(Task.Run(() =>
{`enter code here`
isInsertDone = insertData(arguments)
}));
task.Add(Task.Run(() =>
{
isUpdateDone updateData(arguments)
}));
// wait for execute all above tasks
Task.WaitAll(task.ToArray());
// return response by result of insert and update.
return Ok<bool>(isInsertDone && isUpdateDone);
}
答案 2 :(得分:-1)
如果它是一个长时间运行的功能,并且对当前功能没有直接影响,则无需等待。火与忘记。您可以安全地删除等待。
public async Task<IHttpActionResult> doSomething(arguments) {
//... Perform some operation which includes some async database transactions
if(operation succesed) {
NotificationsAsync(userid); //Start notifications and continue
}
return result;
}
我建议使用消息传递队列来处理类似的工作,但这是一个更高级的主题,超出了这个问题的范围。