c#aspx线程的简单示例

时间:2015-03-04 10:25:02

标签: c# asp.net multithreading

我正在寻找几天使用threads来表示使用c#的aspx网站的简单示例。找到一些用于vb.net但无法使用c#。

我的aspx站点需要threadbackgroundworker查询数据库并使用响应值进行一些计算。这需要很长时间,我想在计算时更新我的​​网站以通知用户。

我尝试使用ajax update panel但是出现超时错误(认为计算时间太长)。还试过https://msdn.microsoft.com/de-de/library/wkays279.aspx但是得到了一个错误,即不允许异步线程化。

有人有链接或简单的例子吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用PageAsyncTask类,而不是直接使用Thread类。以下页面还包含一个示例:https://msdn.microsoft.com/en-us/library/system.web.ui.pageasynctask.aspx

答案 1 :(得分:1)

从官方asp.net网站上阅读此链接,它也有代码示例:http://www.asp.net/mvc/overview/performance/using-asynchronous-methods-in-aspnet-mvc-4

更高级别的观点:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx

它不是后台工作者,而是新的异步/等待基于任务的异步。

以下是第一篇文章

中的同步与异步方法的示例

同步示例:

public List<Gizmo> GetGizmos()
{
    var uri = Util.getServiceUri("Gizmos");
    using (WebClient webClient = new WebClient())
    {
        return JsonConvert.DeserializeObject<List<Gizmo>>(
            webClient.DownloadString(uri)
        );
    }
}

与异步:

public async Task<List<Gizmo>> GetGizmosAsync()
{
    var uri = Util.getServiceUri("Gizmos");
    using (HttpClient httpClient = new HttpClient())
    {
        var response = await httpClient.GetAsync(uri);
        return (await response.Content.ReadAsAsync<List<Gizmo>>());
    }
}

在示例中,这些方法包含在GizmoService类中,这是您的&#34;后端&#34; C#。您可以从控制器中调用这些方法,如下所示:

public ActionResult Gizmos()
{
    ViewBag.SyncOrAsync = "Synchronous";
    var gizmoService = new GizmoService();
    return View("Gizmos", gizmoService.GetGizmos());
}
public async Task<ActionResult> GizmosAsync()
{
    ViewBag.SyncOrAsync = "Asynchronous";
    var gizmoService = new GizmoService();
    return View("Gizmos", await gizmoService.GetGizmosAsync());
}