为了账号安全,请及时绑定邮箱和手机立即绑定

异步运行长时间同步操作

异步运行长时间同步操作

C#
Smart猫小萌 2021-10-09 14:06:18
下面我有一个简单的异步示例,它按我的预期工作,输出如下:StartingProcessing DiffLog Diff InitiatedDiff processed我需要对此进行调整,以便 GetDiff 是由 LogDiff 异步调用的同步操作。我的基本场景如下:当用户单击按钮保存项目时,我必须在项目的新版本和旧版本之间生成差异,这是一项昂贵的操作。我不希望用户必须等待这个差异完成,因为他们真正感兴趣的是他们的项目被保存,所以我希望这个同步操作在后台异步执行,这样用户就没有等待它,甚至知道它。这意味着我什至不需要回调,我只想在后台触发生成此差异的代码。考虑到所有这些,我应该如何调整我的例子来实现这一点?也仅供参考,我在 .net 4.0 上,这就是为什么我在我的示例中使用 Delay polyfill 方法的原因。class Program{    static void  Main()    {        Console.WriteLine("Starting");        LogDiff();        Console.WriteLine("Log Diff Initiated");        Console.ReadLine();    }    public static async Task LogDiff()    {        var results = await GetDiff("Processing Diff");        Console.WriteLine(results);    }    public static async Task<string> GetDiff(string str)    {        Console.WriteLine(str);        await Delay(2000);        return "Diff processed";    }    public static Task Delay(double milliseconds)    {        var tcs = new TaskCompletionSource<bool>();        System.Timers.Timer timer = new System.Timers.Timer();        timer.Elapsed += (obj, args) =>        {            tcs.TrySetResult(true);        };        timer.Interval = milliseconds;        timer.AutoReset = false;        timer.Start();        return tcs.Task;    }}
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

你为什么不在LogDiff()分离任务中执行你的重方法?


    static void  Main()

    {

        Console.WriteLine("Starting");

        //Save project

        Console.WriteLine("Project saved");

        Task task = new Task(new Action(LogDiff));

        task.Start();

        Console.ReadLine();

    }


    public void LogDiff()

    {

        var results = GetDiff("Processing Diff");

        Console.WriteLine(results);

    }


查看完整回答
反对 回复 2021-10-09
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信