ASP.NET API请求未成功完成

时间:2019-12-20 12:40:00

标签: c# asp.net api web-services async-await

我制作了将向用户发送消息但请求未成功完成的Web服务

我知道这是因为并非所有用户都收到了消息。 有人可以帮我吗?下面是我的代码

#define Integers_in_File 3

int array[Integers_in_File];

for(int i = 0; i < Integers_in_File; i++)
{
     fscanf(ptr,"%d",&array[i]);     // writing to respective int buffers, 
}                                    // provided as elements of an int array.

for(int i = 0; i < Integers_in_File; i++)
{
     printf("%d",array[i]);          // Output the scanned integers from 
}                                    // the file.

2 个答案:

答案 0 :(得分:0)

如果必须使用任务,可以尝试采用此任务,请注意最后三个参数,它们可能不符合您的要求。

 Task.Factory.StartNew(
                        () =>
                            WriteMessageInBackground(invoicesIn.Split(','),  _messageController, chkSms.Checked,
                                chkEmail.Checked, messageTemplate),
                        CancellationToken.None,
                        TaskCreationOptions.PreferFairness,
                        TaskScheduler.Default);

它立即返回,但重要的是要理解,WriteMessageInBackground方法只是将消息批量写入表中,我们还有另一个组件来拾取它们进行发送,因为邮件服务器尤其喜欢接收它几天自己该死的时间。 正如评论中所提到的,如果这项工作真的可以长期运行,那么确实需要将其移交给网站以外的其他地方来运行它。

答案 1 :(得分:0)

因此,您正在启动一个大约需要2个小时才能完成的后台线程,但尚未完成。

可能会发生几件事:

  1. 发生了一个无法看到的异常,因为没有报告。
  2. 默认情况下,IIS配置为在20分钟没有收到任何新的传入请求后关闭应用程序池。它确实知道是否仍在处理 request ,但不知道正在运行后台线程,因此您的应用可能会在该后台工作中途被杀死。

我的赌注是第二名。您可以configure the app pool to never shut down,但是ASP.NET根本不是为长时间运行的后台任务而设计的。您仍然有理由手动回收应用程序池,并且您将不知道后台任务是否仍在运行。您最好将作业放在数据库中的队列中,并使用Windows Service进行处理。