Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中执行后台任务的最佳实践#_C#_Background Process - Fatal编程技术网

C# 在c中执行后台任务的最佳实践#

C# 在c中执行后台任务的最佳实践#,c#,background-process,C#,Background Process,我想知道在c#中执行后台任务的最佳实践是什么 例如,在我的应用程序中,我有一个save()函数,当我执行这个函数时,我想在后台运行另一个任务——在我的例子中,使用google maps geocoder以lat/lng格式转换地址。我建议您在保存之前收集和/或计算所有需要保存的信息 考虑一下:如果从地址到lat/lng的转换失败。Save()方法是否实际保存对象? 我建议您将该逻辑放在Save()方法之外的其他地方 你可以这样做: // example object private Object

我想知道在c#中执行后台任务的最佳实践是什么


例如,在我的应用程序中,我有一个save()函数,当我执行这个函数时,我想在后台运行另一个任务——在我的例子中,使用google maps geocoder以lat/lng格式转换地址。

我建议您在保存之前收集和/或计算所有需要保存的信息

考虑一下:如果从地址到lat/lng的转换失败。
Save()
方法是否实际保存对象? 我建议您将该逻辑放在
Save()
方法之外的其他地方

你可以这样做:

// example object
private ObjectToSave PrepareObjectForPersistance()
{
    return new ObjectToSave { LatLng = await ConvertAddressToLatLng(address) };
}
然后将要保存的对象传递给save()方法:


我建议您在保存之前收集和/或计算所有需要保存的信息

考虑一下:如果从地址到lat/lng的转换失败。
Save()
方法是否实际保存对象? 我建议您将该逻辑放在
Save()
方法之外的其他地方

你可以这样做:

// example object
private ObjectToSave PrepareObjectForPersistance()
{
    return new ObjectToSave { LatLng = await ConvertAddressToLatLng(address) };
}
然后将要保存的对象传递给save()方法:


你听说过任务对象吗?谷歌的BackgroundWorker,task,async/await@PJvG,并行编程与OP的问题无关。OP希望在不阻塞UI的情况下访问外部资源。为此,
asyncwait
是.NET中最好的方法。它不会创建新线程,也不会使用其他内核来处理数据。@PJvG,您可以使用基于任务的异步编程,但在某种程度上会浪费资源/线程。因为“后台”线程什么也不做——只等待响应。这就是为什么
asyncwait
可以被认为是处理外部资源的好方法。我会使用微软的反应式框架(NuGet System.Reactive)。它远比TPL或目前为止介绍的任何其他选项强大。你听说过任务对象吗?google for BackgroundWorker,task,async/await@PJvG,并行编程与OP的问题无关。OP希望在不阻塞UI的情况下访问外部资源。为此,
asyncwait
是.NET中最好的方法。它不会创建新线程,也不会使用其他内核来处理数据。@PJvG,您可以使用基于任务的异步编程,但在某种程度上会浪费资源/线程。因为“后台”线程什么也不做——只等待响应。这就是为什么
asyncwait
可以被认为是处理外部资源的好方法。我会使用微软的反应式框架(NuGet System.Reactive)。它远比第三方物流或迄今为止提出的任何其他选择更强大。