C# task.Start()是否在后台运行

C# task.Start()是否在后台运行,c#,task,C#,Task,我有大量记录可以通过移动设备向其他移动设备发送推送通知 为此,我将用于task.Start()中的循环。我想知道task.Start()是否在后台运行?因此,在向移动设备发送远程通知的同时,我还可以做一些其他事情&它不会阻塞移动用户界面 下面的代码我正在使用 var pushTask = new Task(() => { if (myPushDataFilterd.Any()) { var title = txtHomeworkTitle.Value.Tri

我有大量记录可以通过移动设备向其他移动设备发送推送通知

为此,我将
用于
task.Start()中的
循环。我想知道
task.Start()
是否在后台运行?因此,在向移动设备发送远程通知的同时,我还可以做一些其他事情&它不会阻塞移动用户界面

下面的代码我正在使用

var pushTask = new Task(() =>
{
    if (myPushDataFilterd.Any())
    {
        var title = txtHomeworkTitle.Value.Trim();
        for (int index = 0; index < myPushDataFilterd.Count; index++)
        {
            var row = myPushDataFilterd[index];

            jData.Add("moduleName", "Homework");
            jData.Add("organizationId", ddlOrganization.SelectedValue);
            jData.Add("studentId", studentId);
            jGcmData.Add("to", to);
            jGcmData.Add("data", jData);
            api = row.ServerKeyPush;                                       

            var url = new Uri("https://fcm.googleapis.com/fcm/send");

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + api);
                var r = client.PostAsync(url, new StringContent(jGcmData.ToString(), Encoding.Default, "application/json")).Result;
            }
        }
    }
});
pushTask.Start();
var pushTask=新任务(()=>
{
if(myPushDataFilterd.Any())
{
var title=txtHomeworkTitle.Value.Trim();
for(int index=0;index

实际上,这就是我现在在移动应用程序中使用的web应用程序部分。在移动应用程序中,我是否还有其他更好的选项来发送通知?

Task
通常表示异步操作,因此任务块中的代码不会阻塞,除非您希望通过显式等待读取其值,请检查以下内容,例如:

  Task myTask = new Task( () => Console.WriteLine("It is me myTask ^_^ "));
  myTask.Start();
  Console.WriteLine("Currently not waiting the output from myTask");
  myTask.Wait();//Now I am waiting
  //Output:
  //Currently not waiting the output from myTask
  //It is me myTask ^_^ 
您还可以使用
task.Run
TaskFactory.StartNew
在一条语句中创建和启动任务。
有关它们之间用法差异的更多信息,请检查。

任务通常表示异步操作,因此任务块中的代码不会阻塞,除非您希望通过显式等待读取其值,请检查以下内容,例如:

  Task myTask = new Task( () => Console.WriteLine("It is me myTask ^_^ "));
  myTask.Start();
  Console.WriteLine("Currently not waiting the output from myTask");
  myTask.Wait();//Now I am waiting
  //Output:
  //Currently not waiting the output from myTask
  //It is me myTask ^_^ 
您还可以使用
task.Run
TaskFactory.StartNew
在一条语句中创建和启动任务。
有关它们之间使用差异的更多信息,请查看。

创建任务毫无意义。您正在执行IO操作,因此可以利用已经提供的异步api

private async Task PostData()
{
    if (myPushDataFilterd.Any())
    {
        var title = txtHomeworkTitle.Value.Trim();
        using (var client = new HttpClient())
        {
            for (int index = 0; index < myPushDataFilterd.Count; index++)
            {
                var row = myPushDataFilterd[index];

                jData.Add("moduleName", "Homework");
                jData.Add("organizationId", ddlOrganization.SelectedValue);
                jData.Add("studentId", studentId);
                jGcmData.Add("to", to);
                jGcmData.Add("data", jData);
                api = row.ServerKeyPush;                                       

                var url = new Uri("https://fcm.googleapis.com/fcm/send");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + api);
                var r = await client.PostAsync(url, new StringContent(jGcmData.ToString(), Encoding.Default, "application/json"));
            }
        }
    }
}
private async Task PostData()
{
if(myPushDataFilterd.Any())
{
var title=txtHomeworkTitle.Value.Trim();
使用(var client=new HttpClient())
{
for(int index=0;index
创建任务毫无意义。您正在执行IO操作,因此可以利用已经提供的异步api

private async Task PostData()
{
    if (myPushDataFilterd.Any())
    {
        var title = txtHomeworkTitle.Value.Trim();
        using (var client = new HttpClient())
        {
            for (int index = 0; index < myPushDataFilterd.Count; index++)
            {
                var row = myPushDataFilterd[index];

                jData.Add("moduleName", "Homework");
                jData.Add("organizationId", ddlOrganization.SelectedValue);
                jData.Add("studentId", studentId);
                jGcmData.Add("to", to);
                jGcmData.Add("data", jData);
                api = row.ServerKeyPush;                                       

                var url = new Uri("https://fcm.googleapis.com/fcm/send");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + api);
                var r = await client.PostAsync(url, new StringContent(jGcmData.ToString(), Encoding.Default, "application/json"));
            }
        }
    }
}
private async Task PostData()
{
if(myPushDataFilterd.Any())
{
var title=txtHomeworkTitle.Value.Trim();
使用(var client=new HttpClient())
{
for(int index=0;index
您应该使用
任务。运行
而不是
新任务()
。它将在线程池的不同线程上运行。哦,这不是一个好方法吗?请参见创建任务,但运行
client.PostAsync
而不等待它(
.Result
是同步的)。所有这些都可以在根本不创建任务的情况下编写。您应该标记您的方法
async Task
并等待
client.PostAsync
。您应该使用
Task.Run
而不是
new Task()
。它将在线程池的不同线程上运行。哦,这不是一个好方法吗?请参见创建任务,但运行
client.PostAsync
而不等待它(
.Result
是同步的)。所有这些都可以在根本不创建任务的情况下编写。您应该标记您的方法
异步任务
并等待
客户端.PostAsync