Я использую Litedb v4 в Xamarin, я создаю соединение liteDatabase и получаю коллекции внутри него один раз, и передаю коллекцию нескольким потокам, которые одновременно выполняют givenCollection.findALL().ToList()
. Приложение иногда падает (не всегда), что приводит к ошибке SIGSEGV, я не понимаю, что является причиной этой ошибки.
Код для воспроизведения
protected async virtual Task<IEnumerable<T>> ReadAllItems<T>(LiteCollection<T> collection)
{
return await Task.Run(() =>
{
return collection.FindAll().ToList();
});
}
Я получаю объект коллекции один раз и передается вышеуказанному методу. вызов вышеупомянутого метода несколько раз один за другим, вызывающий ошибку.
Это журнал, который я получаю:
at <unknown> <0xffffffff>
at System.String:FastAllocateString <0x00037>
at System.String:CreateStringFromEncoding <0x000fb>
at System.Text.UTF8Encoding:GetString <0x002a3>
at LiteDB.BsonReader:ReadString <0x00143>
at LiteDB.BsonReader:ReadElement <0x00227>
at LiteDB.BsonReader:ReadDocument <0x0015b>
at LiteDB.BsonReader:ReadElement <0x002af>
at LiteDB.BsonReader:ReadDocument <0x0015b>
at LiteDB.BsonReader:ReadElement <0x002af>
at LiteDB.BsonReader:ReadArray <0x0015b>
at LiteDB.BsonReader:ReadElement <0x0031f>
at LiteDB.BsonReader:ReadDocument <0x0015b>
at LiteDB.BsonReader:ReadElement <0x002af>
at LiteDB.BsonReader:ReadDocument <0x0015b>
at LiteDB.BsonReader:Deserialize <0x0009b>
at LiteDB.QueryCursor:Fetch <0x003eb>
at <Find>d__9:MoveNext <0x007a3>
at <Find>d__13:MoveNext <0x00e63>
at <Find>d__17:MoveNext <0x00593>
at System.Collections.Generic.List`1:AddEnumerable <0x00287>
at System.Collections.Generic.List`1:.ctor <0x0038f>
at <>c__DisplayClass7_0`1:<ReadAllItems>b__0 <0x0013b>
at System.Threading.Tasks.Task`1:InnerInvoke <0x000d7>
at System.Threading.Tasks04-11 02:13:11.211 F/libc
(13977): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x1b in tid 14021 (Thread Pool Wor)