使用C# TDengine驱动消费数据失败

Using C# TDengine driver to consume data failed

我使用C# TDengine驱动从taos数据库订阅数据。我的示例代码如下所示:

public void RunSubscribeWithoutCallback(IntPtr conn, string table)
        {

            PrepareData(conn, table);
            string topic = $"{table}_topic";
            string sql = $"select * from {table}";
            IntPtr subscribe = TDengine.Subscribe(conn, true, topic, sql, null, IntPtr.Zero, 1000);
            Console.WriteLine("consume from begin");
            IntPtr taosRes = TDengine.Consume(subscribe);

            UtilsTools.DisplayRes(taosRes);
            TDengine.FreeResult(taosRes);
            for (int i = 0; i < 3; i++)
            {
                InsertData(conn, table);
            }
            Console.WriteLine("consume new data");
            taosRes = TDengine.Consume(subscribe);
            UtilsTools.DisplayRes(taosRes);
            Console.WriteLine("Unsubscribe and keep progress");
            TDengine.FreeResult(taosRes);

            TDengine.Unsubscribe(subscribe, false);
        }

虽然输出是这样的

root@mybook:~/git_space/test/TDengine/src/connector/C#/examples# dotnet run drop database if exists csharp_example_db success create database if not exists csharp_example_db keep 3650 success use csharp_example_db success create table if not exists subscribe_without_callback (ts timestamp,i8 tinyint,i16 smallint,i32 int,i64 bigint); success insert into subscribe_without_callback values(1646150410000,1,2,3,4) success consume from begin 1646150410000 | 1 | 2 | 3 | 4 | insert into subscribe_without_callback values(1646150410100,1,2,3,4) success insert into subscribe_without_callback values(1646150410200,-1,-2,-3,-4) success insert into subscribe_without_callback values(1646150410300,1,2,3,4) success insert into subscribe_without_callback values(1646150410400,-1,-2,-3,-4) success insert into subscribe_without_callback values(1646150410500,1,2,3,4) success insert into subscribe_without_callback values(1646150410600,-1,-2,-3,-4) success consume new data

只能第一次消费。下一次应用程序崩溃了。 taoslog 文件中没有任何错误。 有人知道如何解决这个问题吗?

我以前也遇到过这种情况。这是因为你释放了 taosRes,它是一个结构 TAOS_RES,有一些内存共享给对象订阅,它是一个结构 TAOS_SUB。他们共享一个指针 SSqlObj * pSql; 如果你释放你 'taosRes' 这将导致下一个消费段错误,这对于 C# 应用程序来说很难实现这一点。 更何况,这在TDengine的网站上已经提到了。