是否可以在不等待结果的情况下在新线程中调用非托管资源的dispose()? 我有一个使用2个非托管资源的异步函数。 (rdKafka制片人和话题)。经过一些测试和时间戳测量后,我意识到他们的Dispose函数需要很长时间才能完成,所以我想在另一个线程中调用dispose()这些资源,而不是“等待”他的结果。 意思是说,我想尽快得到结果,让一些线程处理dispose()。如何以异步方式处理非托管资源?
这里是我的代码:
public async Task<bool> ProduceMessage(object someobject)
{
var result = true;
using (var producer = new Producer(_kafkaOptions.Uri)) {
using (var topic = producer.Topic(_kafkaOptions.Topic, topicConfig)) {
var report = topic.Produce(someobject);
await report.ContinueWith(task =>
{
if (task.Status == TaskStatus.RanToCompletion) {
//if produce succeed and task completed, return true
_logger.LogDebug("Producer Succeed");
result = true;
} else {
HandleError(task);
result = false;
}
});
与您的问题没有直接关系,但是您不应该将异步/等待与'ContinueWith'混合使用,否则会导致很多错误。 [你应该只是'等待报告',并在'ContinueWith'后面的代码](https://gist.github.com/leftler/2767460d2aa135aa80c9b123e517b51b)。还请更新您的问题以显示该方法的其余部分,它将帮助我们形成答案。 –
对不起,我是新来的:)感谢您的评论 – Shani