Download
(5 Kb)
Download
Updated: 04/29/23 09:26 AM
Pictures
File Info
Compatibility:
Necrom (9.0.0)
Scribes of Fate (8.3.5)
Updated:04/29/23 09:26 AM
Created:09/02/18 10:37 AM
Monthly downloads:21,952
Total downloads:1,909,732
Favorites:1,005
MD5:
LibAsync  Popular! (More than 5000 hits)
Version: 2.3.4
by: votan [More]
Description
Read this article of the Wiki.

API
local async = LibAsync
local task = async:Create(name)

The signature of FuncOfTask is:
Code:
local function(task)
end
-- Get the current context, if you are within a FuncOfTask or nil.
Code:
function async:GetCurrent()
-- Create an interruptible task context.
Code:
function async:Create(name)
-- Resume the execution context.
Code:
task:Resume()
-- Suspend the execution context and allow to resume anytime later.
Code:
function task:Suspend()
-- Interupt and fully stop the execution context. Can be called from outside to stop everything.
Code:
function task:Cancel()
-- Run the given FuncOfTask in your task context execution.
Code:
function task:Call(funcOfTask)
-- Continue your task context execution with the given FuncOfTask after the previous as finished.
Code:
function task:Then(funcOfTask)
-- Start an interruptible for-loop.
Code:
function task:For(from, to, step)
function task:For(pairs(tbl))
function task:For(ipairs(tbl))
-- Execute the async-for with the given step-function. The parameters of the step-function are those you would use in your for body.
Code:
function task:Do(func)
The signature if func is function(index) or function(key, value)
If you return async.BREAK within func, it will break the loop.

-- Start an interruptible while-loop.
Code:
function task:While(func):Do(doFunc)
As long as func returns true, doFunc and func will be called again.

-- Start an once per frame wait loop.
Code:
function task:WaitUntil(func)
Until func returns true, the function will be called again in the next frame. Keep the check condition simple. For example, checking a flag variable set by an event.

-- Suspend the execution of your task context for the given delay in milliseconds and then call the given FuncOfTask to continue.
Code:
function task:Delay(delay, funcOfTask)
Delay will suspend the exceution immediately, no matter there in the chain it is used. For delaying at chain position use:
Code:
function task:ThenDelay(delay, funcOfTask)
-- Stop the delay created by Delay
Code:
function task:StopTimer()
-- Set a FuncOfTask as a final handler. Called even if something went wrong in your context.
Code:
function task:Finally(funcOfTask)
-- Set a FuncOfTask as an error handler. Called if something went wrong in your context.
Code:
function task:OnError(funcOfTask)

Example 1
Lua Code:
  1. local async = LibAsync
  2.  
  3. local task = async:Create("example1")
  4.  
  5. local i=1
  6. local function Hello() d("Hello") end
  7. local function World() d("World") end
  8.  
  9. task:Call(function(task)
  10.  d(i)
  11.  task:Call(Hello):Then(World)
  12.  i = i + 1
  13.  return i<1000
  14. end):Then(function() d("end") end)
Example 2
Lua Code:
  1. local async = LibAsync
  2.  
  3. local task = async:Create("example2")
  4.  
  5. local start = GetGameTimeMilliseconds()
  6.  
  7. task:For (1,1000):Do(function(index) d(index) end):Then(
  8. function()
  9.   task:For (pairs({"a", "b"})):Do(function(key, value) d(key,value)
  10.     task:For (ipairs({"c", "d"})):Do(function(key, value) d(key,value)  end)
  11.  end)
  12. end):For(1001,1010):Do(function(index) d(index) end):Then(function(task)
  13.   df("%ims", GetGameTimeMilliseconds() - start)
  14. end)
Example 3
Lua Code:
  1. local async = LibAsync
  2.  
  3. local i = 0
  4. async:While(function() return i<100 end):Do(function()
  5.   d(i)
  6.   i = i+1
  7. end)
Example 4
Lua Code:
  1. local async = LibAsync
  2. local time = GetGameTimeSeconds()+10
  3. async:WaitUntil(function()
  4.   return GetGameTimeSeconds()>=time
  5. end):Then(function()
  6.   d("end")
  7. end)
Example 5: Nested calls.
Lua Code:
  1. local async = LibAsync
  2.  
  3. async:Call(function(task)
  4.   d("a")
  5.   task:Call(function(task)
  6.     d("b")
  7.     task:Call(function(task)
  8.       d("c")
  9.     end)
  10.   end)
  11. end):Then(function(task)
  12.   d("d")
  13.   task:Call(function(task)
  14.     d("e")
  15.     task:Call(function(task)
  16.       d("f")
  17.     end)
  18.   end)
  19. end)
Output:
a
b
c
d
e
f

Remarks
  • Yes, using LibAsync increases the total duration of the process for a better framerate.
  • Lua code can cause hiccups and (micro-)freezes, but has nothing to do the lag.
  • Lua can cause crash to bug report, if too much memory is allocated within one frame. (e.g. string operations) => Spread you code over time.
  • Lua can cause kick to login, if too much server request are done within a time range. (e.g. map pings/buy/sell/ignore, etc.) => Spread you code over time.
version 2.3.4:
- Update for "Necrom".
- No LibStub support.

version 2.3.2:
- Fixed issue with nested "WaitUntil".

version 2.3.1:
- Forgot to remove return in "ThenDelay".

version 2.3.0:
- Fixed execution order issue, if operation are added ourside a running task.
- Add new operation "ThenDelay".

version 2.2.1:
- Update to API 100033 "Markarth".

version 2.2.0:
- Update to API 100032 "Stonethorn".
- New async functions: While and WaitUntil.

version 2.1.0: Register scheduler as late as possible to take count to all actions not using LibAsync.

version 2.0.2:
- Update to API 100029 "Dragonhold".

version 2.0.1:
- Update to API 100028 "Scalebreaker".

version 2.0.0:
- API bump 100027 "Elsweyr".
- Need to go to 2.0 because of the version check of LibStub.

version 1.10.0:
- API bump 100027 "Elsweyr".
- Use of LibStub is optional.

version 1.9.0:
- Update to API 100026 "Wrathstone".
- For V-Sync off/G-Sync the minimum target framerate is 80.

version 1.8.1:
- Work without LibStub as well.

version 1.8.0:
- API update "Murkmire".
- Adjustment to scheduler calculation: Reduce allowed-time after a burst even if loops still running.
- Change from GetGameTimeMilliseconds to GetGameTimeSeconds, which has in fact more precision. Thanks to @zsban.
Optional Files (0)


Archived Files (14)
File Name
Version
Size
Uploader
Date
2.3.2
5kB
votan
01/16/21 09:02 AM
2.3.1
5kB
votan
12/19/20 12:13 PM
2.3.0
5kB
votan
12/19/20 09:41 AM
2.2.1
5kB
votan
11/01/20 08:58 AM
2.2.0
5kB
votan
07/31/20 01:48 PM
2.1.0
5kB
votan
12/13/19 02:49 PM
2.0.2
5kB
votan
10/03/19 04:39 AM
2.0.1
5kB
votan
07/29/19 02:17 PM
2.0.0
5kB
votan
05/15/19 01:16 PM
1.10.0
5kB
votan
05/04/19 01:36 PM
1.9.0
4kB
votan
02/23/19 10:15 AM
1.8.1
4kB
votan
11/09/18 01:07 PM
1.8.0
6kB
votan
10/06/18 02:10 PM
1.7
6kB
votan
09/02/18 10:37 AM


Post A Reply Comment Options
Unread 03/14/24, 02:03 PM  
thatlaurachick

Forum posts: 0
File comments: 103
Uploads: 0
Re: Re: Re: Error - started around 7pm Pacific on 3/11

Ok thank you for answering. I'll keep posting there.
Originally Posted by votan
Originally Posted by thatlaurachick
Theses errors are almost constant now. I've reinstalled LibAsync but they just don't stop. I can't turn off LibAsync without losing essential addons like MM and WW.

Before you ask: YES I've reinstalled cleanly, YES I update with MInion multiple times a day, YES I've tried turning addons off and on again.
I use gamepad ui for accessibility reasons.

These errors seem to be tied to "pink" status in LibHistorie. Bad thing is I have 1 guild that cannot pull trader history from ZOS. At most I have 3 days worth, but today it cannot pull at all.

Originally Posted by thatlaurachick
Will post to LibHistorie and MM as well

user:/AddOns/LibAsync/LibAsync.lua:299: operator < is not supported for number < nil
stack traceback:
user:/AddOns/LibAsync/LibAsync.lua:299: in function 'asyncForWithStep'
user:/AddOns/LibAsync/LibAsync.lua:327: in function 'tasko'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryProcessingRequest.lua:47: in function 'GuildHistoryProcessingRequest:StartProcessing'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:372: in function 'GuildHistoryCacheCategory:ProcessNextRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:350: in function 'GuildHistoryCacheCategory:QueueProcessingRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryEventListener.lua:203: in function 'GuildHistoryEventListener:Start'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryLegacyEventListener.lua:338: in function 'GuildHistoryLegacyEventListener:Start'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:141: in function 'internal:SetupListener'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:225: in function 'func'
/EsoUI/Libraries/Globals/globalapi.lua:263: in function '(anonymous)'
That is an issue of LibHistoire. ZOS renamed the history manager.
Report comment to moderator  
Reply With Quote
Unread 03/14/24, 12:43 PM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Re: Re: Error - started around 7pm Pacific on 3/11

Originally Posted by thatlaurachick
Theses errors are almost constant now. I've reinstalled LibAsync but they just don't stop. I can't turn off LibAsync without losing essential addons like MM and WW.

Before you ask: YES I've reinstalled cleanly, YES I update with MInion multiple times a day, YES I've tried turning addons off and on again.
I use gamepad ui for accessibility reasons.

These errors seem to be tied to "pink" status in LibHistorie. Bad thing is I have 1 guild that cannot pull trader history from ZOS. At most I have 3 days worth, but today it cannot pull at all.

Originally Posted by thatlaurachick
Will post to LibHistorie and MM as well

user:/AddOns/LibAsync/LibAsync.lua:299: operator < is not supported for number < nil
stack traceback:
user:/AddOns/LibAsync/LibAsync.lua:299: in function 'asyncForWithStep'
user:/AddOns/LibAsync/LibAsync.lua:327: in function 'tasko'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryProcessingRequest.lua:47: in function 'GuildHistoryProcessingRequest:StartProcessing'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:372: in function 'GuildHistoryCacheCategory:ProcessNextRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:350: in function 'GuildHistoryCacheCategory:QueueProcessingRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryEventListener.lua:203: in function 'GuildHistoryEventListener:Start'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryLegacyEventListener.lua:338: in function 'GuildHistoryLegacyEventListener:Start'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:141: in function 'internal:SetupListener'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:225: in function 'func'
/EsoUI/Libraries/Globals/globalapi.lua:263: in function '(anonymous)'
That is an issue of LibHistoire. ZOS renamed the history manager.
Last edited by votan : 03/14/24 at 12:43 PM.
Report comment to moderator  
Reply With Quote
Unread 03/14/24, 11:48 AM  
thatlaurachick

Forum posts: 0
File comments: 103
Uploads: 0
Re: Error - started around 7pm Pacific on 3/11

Theses errors are almost constant now. I've reinstalled LibAsync but they just don't stop. I can't turn off LibAsync without losing essential addons like MM and WW.

Before you ask: YES I've reinstalled cleanly, YES I update with MInion multiple times a day, YES I've tried turning addons off and on again.
I use gamepad ui for accessibility reasons.

These errors seem to be tied to "pink" status in LibHistorie. Bad thing is I have 1 guild that cannot pull trader history from ZOS. At most I have 3 days worth, but today it cannot pull at all.

Originally Posted by thatlaurachick
Will post to LibHistorie and MM as well

user:/AddOns/LibAsync/LibAsync.lua:299: operator < is not supported for number < nil
stack traceback:
user:/AddOns/LibAsync/LibAsync.lua:299: in function 'asyncForWithStep'
user:/AddOns/LibAsync/LibAsync.lua:327: in function 'tasko'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryProcessingRequest.lua:47: in function 'GuildHistoryProcessingRequest:StartProcessing'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:372: in function 'GuildHistoryCacheCategory:ProcessNextRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:350: in function 'GuildHistoryCacheCategory:QueueProcessingRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryEventListener.lua:203: in function 'GuildHistoryEventListener:Start'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryLegacyEventListener.lua:338: in function 'GuildHistoryLegacyEventListener:Start'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:141: in function 'internal:SetupListener'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:225: in function 'func'
/EsoUI/Libraries/Globals/globalapi.lua:263: in function '(anonymous)'
Last edited by thatlaurachick : 03/14/24 at 12:20 PM.
Report comment to moderator  
Reply With Quote
Unread 03/11/24, 09:05 PM  
thatlaurachick

Forum posts: 0
File comments: 103
Uploads: 0
Error - started around 7pm Pacific on 3/11

Will post to LibHistorie and MM as well

user:/AddOns/LibAsync/LibAsync.lua:299: operator < is not supported for number < nil
stack traceback:
user:/AddOns/LibAsync/LibAsync.lua:299: in function 'asyncForWithStep'
user:/AddOns/LibAsync/LibAsync.lua:327: in function 'tasko'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryProcessingRequest.lua:47: in function 'GuildHistoryProcessingRequest:StartProcessing'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:372: in function 'GuildHistoryCacheCategory:ProcessNextRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryCacheCategory.lua:350: in function 'GuildHistoryCacheCategory:QueueProcessingRequest'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryEventListener.lua:203: in function 'GuildHistoryEventListener:Start'
user:/AddOns/LibHistoire/guildHistoryCache/GuildHistoryLegacyEventListener.lua:338: in function 'GuildHistoryLegacyEventListener:Start'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:141: in function 'internal:SetupListener'
user:/AddOns/MasterMerchant/Libs/LibGuildStore/LGS_LibHistoire.lua:225: in function 'func'
/EsoUI/Libraries/Globals/globalapi.lua:263: in function '(anonymous)'
Report comment to moderator  
Reply With Quote
Unread 06/08/23, 01:08 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Originally Posted by desertforce
Hi Votan,

I am not sure if I did something wrong or not. But I think that the latest version of LibAsync (Version 2.3.4) has some really old API-Versions (100034 100035) in its text file . Not sure if everything else is ok. Would be great if you could/would check it please .

Many thx
De-chan
Whoops. But that does not matter. Everything else is correct.
Report comment to moderator  
Reply With Quote
Unread 06/05/23, 05:17 PM  
desertforce

Forum posts: 5
File comments: 154
Uploads: 0
Hi Votan,

I am not sure if I did something wrong or not. But I think that the latest version of LibAsync (Version 2.3.4) has some really old API-Versions (100034 100035) in its text file . Not sure if everything else is ok. Would be great if you could/would check it please .

Many thx
De-chan
Report comment to moderator  
Reply With Quote
Unread 12/06/22, 06:58 PM  
roludo

Forum posts: 0
File comments: 1
Uploads: 0
Error

How to solve?

the image does not appear. '-'

Last edited by roludo : 12/06/22 at 07:00 PM.
Report comment to moderator  
Reply With Quote
Unread 02/07/21, 04:54 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Originally Posted by ChrisK
Thanks Votan - love all your AddOns!
Thank You @ChrisK.
Report comment to moderator  
Reply With Quote
Unread 02/06/21, 07:11 PM  
ChrisK

Forum posts: 0
File comments: 176
Uploads: 0
Thanks Votan - love all your AddOns!
Report comment to moderator  
Reply With Quote
Unread 08/05/20, 08:03 AM  
Marazota
AddOn Author - Click to view AddOns

Forum posts: 257
File comments: 1517
Uploads: 2
rolling back to old vesion fixed this issue but need to find a way to get rid of libstub anyway
Report comment to moderator  
Reply With Quote
Unread 08/04/20, 03:18 PM  
Marazota
AddOn Author - Click to view AddOns

Forum posts: 257
File comments: 1517
Uploads: 2
hey what i need to fix to make this addon work
its not working with new version of library...

also this addon isnt presented on esoui



Report comment to moderator  
Reply With Quote
Unread 08/03/20, 04:05 PM  
orcashow

Forum posts: 1
File comments: 20
Uploads: 0
Re: Re: Re: Re: Inventory Insight errors after today's LibAsync update

We might want to keep in mind that many of the authors are prepping addon updates for Update 27 which is coming sometime here in August. It takes time & all the authors create & maintain their addons in their spare time... and for no pay. If you need to do the quick-fix/workaround for now then that's the best recommendation. Once Update 27 hits, most if not all of our favorite addons will be current to the new API changes. Most importatn, DO NOT rage on the addon authors. It can be a thankless job which none of the rest of us have stepped up to do. Try to be patient. They got this.
Report comment to moderator  
Reply With Quote
Unread 08/02/20, 07:19 PM  
fgoron2000

Forum posts: 0
File comments: 143
Uploads: 0
Re: Re: Re: Re: Inventory Insight errors after today's LibAsync update

Originally Posted by DigitalHype
Originally Posted by fgoron2000
Originally Posted by DigitalHype
Appears I'm not the only one having issues with Inventory Insight after updating LibAsync to current.

Others are report that rolling back LibAsync to 2.1.0 solves the issue. See threads over in that addon:

https://www.esoui.com/downloads/info....html#comments

This recommended fix worked fine for me, the caveat is simply that when Inventory Insight gets updated that you do a fresh install, but until that time, the fix worked
Good to hear. But, this isn't a fix. This is a workaround. What needs to happen here? Does Inventory Insight need to so something to work with the new LibAsync? If so, what? I fear that InventoryInsight might be abandonware at this point. Do we need a fork, or is it still being maintained?
I understand that it was a temporary workaround. I didn't mean for the word fix to imply that the issue had been permanently resolved, sorry if I gave that impression. That's why I referenced others' recommendations to do a fresh reinstall of InventoryInsight after it was updated, because the workaround involved a modification to the Inventory Insight addon, not to LibAsync. By the way, to answer your question, it is not abandonware. It's also already been updated since your post, and it addressed the issue of its LibAsync dependency. And thus far, I'm having no issues with either LibAsync or Inventory Insight at this point, and I didn't even need to do a fresh reinstall.
Report comment to moderator  
Reply With Quote
Unread 08/01/20, 08:45 AM  
Sharlikran
 
Sharlikran's Avatar
AddOn Author - Click to view AddOns

Forum posts: 614
File comments: 1971
Uploads: 15
Please maintain some kind of civility. My statement was direct and in response to statements that people have been making that are false and misleading about LibAsync, Votan's MiniMap, other mods, and now Inventory Insight.

My last statement did not include specific version numbers because it is sufficient to say latest version. I should not have to state that users should be using LibAsync 2.2.0, and Inventory Insight 3.45. However, Inventory Insight 3.45 was only uploaded this morning.

Mod authors should not have to argue with users when they are explaining that if all the mods a user is using were up to date that things would work properly. Mod authors expect users to be using the current version of everything because if you do not then we can not predict what other issues may occur. I do not test with older versions of any mod installed therefore I am not able to reproduce the errors reported.
Last edited by Sharlikran : 08/01/20 at 10:03 AM.
Report comment to moderator  
Reply With Quote
Unread 08/01/20, 06:22 AM  
MaulkinTheGolden

Forum posts: 0
File comments: 1
Uploads: 0
Originally Posted by pandros1484
Originally Posted by Sharlikran
Originally Posted by TagCdog
Hi All,

I'd imagine it is good form to keep posts about another addon on that specific addon's comments page.

In this case I have a working solution which allows you to keep the newest version of LibAsync installed. See it by reading Inventory Insight's comments page.

With that said, it is still a very buggy addon (maybe it just doesn't play well with others?) that needs to be updated/fixed. I don't think it is being maintained anymore which is sad. Disabling it resolved a whole bunch of problems I was experiencing so if anything is acting up try disabling Inventory Insight first.
Inventory Insight has no issues nor does LibAsync. There are too many people posting things that do not address any issues and making suggestions that make things worse.

I have the current version of LibAsync and while I do not use Votan's Minimap on a regular basis I test with it all the time because people post errors that can not be possible. So I test it and then share that I can not reproduce the error.

None of the claims are true, people are simply not updating their mods and continue to try and use older version of things. I have had three users provide me with their addons folder and all I did was open minion, right click and choose Reinstall on each mod. Then ask them what the error is and how they reproduce it. I never could get the error to happen. Send the folder back and they replace theirs with the updated versions, no errors.

Since I did that three times I no longer do it because users can do the same thing.
Putting your borderline rude tone aside, I have tried exactly what you said you did for the users and yet I still have the same error code;

user:/AddOns/IIfA/IIfA.lua:39: Cannot find a library instance of "LibAsync".
stack traceback:
user:/AddOns/LibStub/LibStub/LibStub.lua:87: in function 'LibStub:GetLibrary'
user:/AddOns/IIfA/IIfA.lua:39: in function '(main chunk)'

if you have any actual suggestions I'm all ears. Otherwise there is no need to throw a temper tantrum friend.
The problem there is with the IIfA (Inventory Insight) add-on that is not being updated.

If you download the previous version (2.1) of libasync you can put it in the libs subfolder of IIfa and explicitly reference it from the IIfA.txt file, just below the reference to LibCustomTitles (line 12).

Your IIfA will then use the old version while all other add-ons (like Votan Minimap) will use the new version which they require, and that will solve the problem of the stale IIfA add-on for now.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: