C# 在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
例如,在我的应用程序中,我有一个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)。它远比第三方物流或迄今为止提出的任何其他选择更强大。