方法需要大量时间来返回值

时间:2014-10-14 00:53:57

标签: c# .net multithreading asynchronous

我正在处理C#.net中的场景,其中我正在加载一个页面,并且在该页面加载事件期间,正在调用一个服务来填充用于在页面上显示的值。

该页面还有其他字段。所以这里的问题是,服务通常需要30到60秒才能返回值,在此服务返回值之前,无法选择其他字段。因此,还有一个“SAVE”按钮无法点击,因为我们仍在等待此服务返回值。

我试图在这里解决的问题是,理想情况下,在页面加载,我希望此服务在后台运行,并让其他字段填充值,我应该能够执行其他事件,如SAVE,NEXT PAGE,PREVIOUS PAGE等等。召唤。

服务返回的值的目的仅供参考。代码对此值没有任何依赖性。

2 个答案:

答案 0 :(得分:0)

如果你的服务有一个方法,你可以通过onpageload回调异步来调用它,并等待它内部的异步方法。

如果服务没有异步方法来调用,您可以创建自己的方法,例如:

public string DownloadStringAsync()
    {
        return "Test data";
    }

    public async Task<string> ReceiveStringAsync()
    {
        return await Task<string>.Run(() =>
        {
            //Method to download your data
            return DownloadStringAsync();
        });
    }

并在您的页面加载中等待它:sting data = await ReceiveStringAsync();

您没有提供足够的信息/代码以获得更好的答案。

答案 1 :(得分:0)

您可以尝试在线程中执行它。像这样的东西

    Thread runner = new Thread(() =>
    {
        // run service call here
    });
    runner.IsBackground = true;
    runner.Start();

但是在C#4.0中有新的任务并行库,所以你可以阅读并从那里开始,技术上一个Task就像一个线程,但区别在于Task可以有继续,以及它管理线程池

在此处阅读TPL:Task Parallelism Library