gpt4 book ai didi

c# - 是什么阻止了这个任务长时间运行?

转载 作者:行者123 更新时间:2023-11-30 21:02:29 25 4
gpt4 key购买 nike

出于测试目的,我直接在 .cshtml 页面的 Razor block 内使用它。

@functions{
public class Inline
{
public HttpResponseBase r { get; set; }
public int Id { get; set; }
public List<System.Threading.Tasks.Task> tasks = new List<System.Threading.Tasks.Task>();

public void Writer(HttpResponseBase response)
{
this.r = response;
tasks.Add(System.Threading.Tasks.Task.Factory.StartNew(
() =>
{
while (true)
{
r.Write("<span>Hello</span>");
System.Threading.Thread.Sleep(1000);
}
}
));
}
}
}

@{
var inL = new Inline();
inL.Writer(Response);
}

我原以为它会每秒写一次带有文本“Hello”的跨度。它有时会写一次“你好”,但不是每次,甚至不是大多数时候。为什么这个任务没有长时间运行?

最佳答案

你看到不同结果的原因是因为任务是异步运行的,如果响应对象在你的任务有机会写入它之前完成,taks 将抛出异常并且它会终止你可以做的唯一方式这是如果您在 Writer() 方法的末尾添加 Task.WaitAll()。

这会起作用,但页面不会停止加载内容。

this.r = response;
tasks.Add(System.Threading.Tasks.Task.Factory.StartNew(
() =>
{
while (true)
{
r.Write("<span>Hello</span>");
r.Flush(); // this will send each write to the browser
System.Threading.Thread.Sleep(1000);
}
}

));

//this will make sure that the response will stay open
System.Threading.Tasks.Task.WaitAll(tasks.ToArray());

关于c# - 是什么阻止了这个任务长时间运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com